weixin_52130329 2021-06-16 16:50 采纳率: 50%
浏览 88
已采纳

python爬虫入门问题

import urllib.request,urllib.error

from bs4 import BeautifulSoup

import re

import xlwt

import sqlite3


 

def main():

    baseurl="https://movie.douban.com/top250?star="

    #1.爬取网页

    datalist=getData(baseurl) 

    #2.逐一解析网页

    #3.保存网页

   askURL("https://movie.douban.com/top250?star=")

#爬取网页

def getData(baseurl):

    datalist=[]

    for i in range(0,10): 

        url=baseurl+str(i*25)    

        html=askURL(url)  #保存

        #2.逐一解析网页

        soup=BeautifulSoup(html,"html.parser")  #(形成对象 )(BeautifulSoup有2个属性,一个是要解析的文件,一个是解析器)

        for item in soup.find_all('div ',class_="item"):  

            # print(item)

            return datalist  #调用datalist="",调用了值,但是要有返回值

#得到指定一个URL的网页内容   

def askURL(url):

    head={                               #模拟浏览器头部信息,向豆瓣服务器发送信息

        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

    }

    request=urllib.request.Request(url,headers=head)  #发送请求

    html=""  

    try:

        response=urllib.request.urlopen(request) 

        html=response.read().decode("utf-8")  

        print(html)

    

    except urllib.error.URLError as e: 

        if hasattr(e,"code"):

            print(e.code)      #编码问题

        if hasattr(e,"reason"):

            print(e.reason)   #错误原因

        return html

if __name__=="__main__":  #当程序执行时#程序入口,确定程序从哪执行

#调用函数

    main()


爬的豆瓣信息出来了但也有报错

报错:

Traceback (most recent call last):
  File "f:/爬虫/1/爬取豆瓣.py", line 53, in <module>
    main()
  File "f:/爬虫/1/爬取豆瓣.py", line 13, in main
    datalist=getData(baseurl)
  File "f:/爬虫/1/爬取豆瓣.py", line 28, in getData
    soup=BeautifulSoup(html,"html.parser")  #(形成对象 )(BeautifulSoup有2个属性,一个是要解析的文件,一个是解析器)
  File "D:\python\lib\site-packages\bs4\__init__.py", line 310, in __init__
    elif len(markup) <= 256 and (
TypeError: object of type 'NoneType' has no len()

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2021-06-16 17:34
    关注

    有两个错误的地方,一是在askURL函数里,不要把return html放到except里,否则没有异常时返回为None,将其写成与try,except对齐;二是在函数

    getData里,for循环遍历数据时没有将数据保存到datalist中,在循环中加一句 datalist.append(item),另外后面的return语句要与for对齐。

     

    如对你有帮助,请点采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持