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

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条)

报告相同问题?

悬赏问题

  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题