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)  # 保存数据表

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

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

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

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

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

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7514195
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python读写文件详解,将数据写入一个文件或读一个文件写入另一个文件中。
  • 除此之外, 这篇博客: python爬取文章阅读网实战中的 这个网站的反爬虫机制,并没有限制太大,甚至说没有反爬虫,相对容易些。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述
    又再次运行了一下,完结撒花。

  • 您还可以看一下 石澳老师的python爬虫入门课程中的 爬,反爬,反反爬-爬虫入门程序!小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    针对Python爬虫无法获取全部数据的问题,可以通过以下步骤进行调试和解决:

    1.检查目标网站是否存在反爬虫机制,例如IP封禁、页面渲染等问题,可以使用代理IP或浏览器模拟器等工具进行解决。

    2.检查爬取数据的代码是否存在问题,例如逻辑错误、程序异常等,可以使用调试工具对代码进行逐行调试和排错。

    3.针对爬虫程序无法获取全部数据的具体问题,可以考虑使用一些调试技巧和工具,例如在爬取网络数据的过程中,使用urllib库中的request对象,加入异常处理并捕获异常;使用requests库,可以设置header或者添加cookies等方法,模拟用户请求,从而获取更多的数据。

    4.使用相关库和框架,例如Scrapy、Beautiful Soup等,提高程序的稳定性和可扩展性。

    5.可以在爬取的过程中,将获取到的数据打印输出,方便进行信息和数据的分析和跟踪。

    总之,针对Python爬虫无法获取全部数据的问题,前提是正确理解问题的本质和背后的原因,从而尝试多种方法进行调试和解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^