zora300 2023-06-05 21:15 采纳率: 77.8%
浏览 135
已结题

python爬虫获取不到数据问题

python爬虫获取不到数据问题,我编写了一个爬虫,能成功运行出来,但是有些数据一直获取不到,程序并没有报错,不知道是那出了问题,希望各位能解答一下

img

findLink = re.compile(r'<a href="(.*?)" onclick.*?>')  #图书详情链接 创建正则表达式对象,标售规则   影片详情链接的规则
findImgSrc = re.compile(r'<img src="(.*?)".*?>', re.S) #图书海报
findTitle = re.compile(r'<a.*?title="(.*?)">') #书名
findRating = re.compile(r'<span class="rating_nums">(.*?)</span>')#图书评分
findJudge = re.compile(r'<span class="pl">(\d*)人评价</span>')#评价人数
findInq = re.compile(r'<span class="inq">(.*)</span>') #概述
findBd = re.compile(r'<p class="pl">(.*?)</p>') #相关信息
#<span class="pl">\((.*?)人评价.*?
#<span class="p1">(\d*)人评价</span>


def getData(baseurl):
    datalist = []  # 用于存放所有书的信息
    for i in range(11):  # 调用获取页面信息的函数,一共10页,根据豆瓣图书的链接规律得到
        # 1、生成访问链接
        #baseurl = "https://book.douban.com/top250?start="
        url = baseurl + str(i * 25)
        html = askURL(url)  # 爬取网页函数,见第五步

        # 2、解析数据
        soup = BeautifulSoup(html, "html.parser")
        for item in soup.find_all('tr', class_='item'):
            # 根据html网页可以看到每本书是一个item
            item = str(item)
            data = []  # 用于存放一本书的所有信息

            link = re.findall(findLink, item)[0]  # 通过正则表达式查找
            data.append(link)
            imgSrc = re.findall(findImgSrc, item)[0]
            data.append(imgSrc)
            titles = re.findall(findTitle, item)
            if (len(titles) == 1):  # 修改
                ctitle = titles[0]
                data.append(ctitle)
                #otitle = titles[1].replace("/", "")  # 消除转义字符
                #data.append(otitle)
            else:
                data.append(titles[0])
                data.append(' ')
            rating = re.findall(findRating, item)[0]
            data.append(rating)
            judgeNum = re.findall(findJudge, item)
            data.append(judgeNum)
            inq = re.findall(findInq, item)
            if len(inq) != 0:
                inq = inq[0].replace("。", "")
                data.append(inq)
            else:
                data.append(" ")
            bd = re.findall(findBd, item)[0]
            bd = re.sub('<br(\s+)?/>(\s+)?', "", bd)
            bd = re.sub('/', "", bd)
            data.append(bd.strip())
            datalist.append(data)
    return datalist

def saveData(datalist, savepath):
    print("save.......")
       # 1、创建workbook对象
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)
    # 2、sheet表信息
    sheet = book.add_sheet('豆瓣图书TOP250', cell_overwrite_ok=True)  # 创建工作表
    # 3、写入数据
    col = ('图书详情链接', "图书海报", "图书书名", "图书评分", "图书评价人数", "概况", "图书相关信息")
    for i in range(0,10):
        sheet.write(0, i, col[i])   # 列名
        break
    for i in range(250):
        # print("第%d条" %(i+1))       #输出语句,用来测试
        data = datalist[i]
        for j in range(0,10):
            sheet.write(i+1, j, data[j])
            break
    book.save(savepath)  # 保存数据表
  • 写回答

2条回答 默认 最新

  • MR_Bone 2023-06-07 09:58
    关注

    根据您提供的代码,可能出现数据获取不到的问题有以下几个可能原因:

    1. 网页结构变化:爬虫获取数据的代码是基于特定的网页结构设计的,如果目标网页的结构发生变化,例如标签名、属性名的修改,就会导致无法正常获取数据。
    2. 正则表达式匹配规则不准确:正则表达式是用来匹配特定模式的工具,如果匹配规则不准确或过于具体,可能无法匹配到目标数据。请确保正则表达式与目标网页的实际结构匹配。
    3. 网络请求被阻止:有些网站可能会采取反爬虫措施,例如设置访问频率限制、验证码验证等。如果您的爬虫频繁请求目标网页,可能会被网站的反爬虫机制阻止,导致部分数据无法获取。

    解决这些问题的方法包括:

    1. 检查目标网页的结构:使用浏览器开发者工具或其他工具查看目标网页的源代码,确保代码中使用的标签、属性等信息与实际网页结构一致。
    2. 调试正则表达式:可以使用在线的正则表达式调试工具,逐步调试正则表达式,确保能够准确匹配到目标数据。
    3. 设置合理的请求频率:为了避免被网站的反爬虫机制阻止,可以在爬虫代码中设置适当的请求间隔,模拟人的正常访问行为。
    4. 使用其他爬虫库或框架:除了使用正则表达式进行数据提取,还可以考虑使用其他强大的爬虫库或框架,例如Scrapy、Beautiful Soup等,它们提供了更高级的功能和更方便的数据提取方式。

    希望以上解答对您有帮助!如果还有其他问题,请随时提问。

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

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 赞助了问题酬金15元 6月6日
  • 修改了问题 6月5日
  • 展开全部

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容