xiaoyao01.li 发表于 2021-9-11 20:33

照着抄的贴吧爬虫,怎么不往下一页翻呢。求解

import requests
from lxml import etree

class Tieba(object):
    def __init__(self,name):
      #1.url/headers
      self.url='https://tieba.baidu.com/f?ie=utf-8&kw={}&fr=search'.format(name)
      #headers
      self.headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}

    def get_data(self,url):
      #request、返回网页源码
      response=requests.get(self.url,self.headers)
      return response.content

    def parse_data(self,data): #解析
      html=etree.HTML(data)

      el_list=html.xpath('//*[@id="thread_list"]/li/div/div/div/div/a|//*[@id="thread_top_list"]/li/div/div/div/div/a')
      #print(len(el_list))#看能出来几个结果   如果没有 则可能是语法 或者 浏览器高级渲染把源代码注释了,换个低级headers
      #    或者网页中 用此格式做标注< !-- 引入百度统计 -->,可以用空格替换掉   data=data.decode().replace('< !--','').replace('-->','')
      data_list=[]#title+link的列表
      for el in el_list:   #el 是 html的子项 也属于elment 也可以用xpath语法
            title_link={}
            title_link['title']=el.xpath('./text()')
            title_link['link']='http://tieba.baidu.com' + el.xpath('./@href')
            data_list.append(title_link)
      #一页操作完成,接着下一页找下一页是相对的,不同页索引不一样
      try:
            next_url='https:'+html.xpath('//a/@href')#最后一页没有下一页标签 会报错
      except:         #//a[@Class ="next pagination-item"]/@href    这里用这个语法 网页中可以,但py中显示不出下一页的链接
            next_url =None
      return data_list,next_url

    def save_data(self,data_list):
      for data in data_list:
            print(data)

    def run(self):
      next_url=self.url
      while True:
            data = self.get_data(next_url)             #第一次的下一页链接从首页获取,
            data_list,next_url=self.parse_data(data)   #后面的下一页链接从解析出来的当前页面获取
            # 提取 (数据和翻页的url)
            self.save_data(data_list)
            print(next_url)
            if next_url ==None:
                break

if __name__ == '__main__':
    tieba=Tieba('李毅')
    tieba.run()

QingYi. 发表于 2021-9-11 21:09

答应我 别抄别人代码了好吗 自己琢磨琢磨先

枫叶工作室 发表于 2021-9-11 21:25

多研究吧

fscc无误 发表于 2021-9-11 21:32

这是什么???

lengbingling 发表于 2021-9-11 21:58

为什么不从贴吧 网页地址的规律上下手呢?
https://tieba.baidu.com/f?kw=%E5%8F%A4%E5%8A%9B%E5%A8%9C%E6%89%8E&ie=utf-8&pn=0
https://tieba.baidu.com/f?kw=%E5%8F%A4%E5%8A%9B%E5%A8%9C%E6%89%8E&ie=utf-8&pn=50
https://tieba.baidu.com/f?kw=%E5%8F%A4%E5%8A%9B%E5%A8%9C%E6%89%8E&ie=utf-8&pn=100
https://tieba.baidu.com/f?kw=%E5%8F%A4%E5%8A%9B%E5%A8%9C%E6%89%8E&ie=utf-8&pn=150

zuxin521 发表于 2021-9-11 22:05

照抄确实用处不大,需要自己研究原理

wulal 发表于 2021-9-11 22:17

本帖最后由 wulal 于 2021-9-11 22:26 编辑

你的这个代码每次调用的都是self.url的值 所以每次都一样 改改就行了
比如这样:

ForGot_227 发表于 2021-9-11 22:56

把 parse_data 里面的内容打印出来咯。

ATK 发表于 2021-9-11 22:56

可以抄啊 但你要明白代码就可以

netspirit 发表于 2021-9-11 23:19

贴吧建议爬手机端的
页: [1] 2
查看完整版本: 照着抄的贴吧爬虫,怎么不往下一页翻呢。求解