吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1568|回复: 12
收起左侧

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

[复制链接]
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[2]/div[1]/div[1]/a|//*[@id="thread_top_list"]/li/div/div[2]/div/div[1]/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()')[0]
            title_link['link']='http://tieba.baidu.com' + el.xpath('./@href')[0]
            data_list.append(title_link)
        #一页操作完成,接着下一页  找下一页是相对的,不同页索引不一样
        try:
            next_url='https:'+html.xpath('//a[contains(text(),"下一页")]/@href')[0]  #最后一页没有下一页标签 会报错
        except:         #//a[[url=home.php?mod=space&uid=341152]@Class[/url] ="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的值 所以每次都一样 改改就行了
比如这样:
image.png
ForGot_227 发表于 2021-9-11 22:56
把 parse_data 里面的内容打印出来咯。
ATK 发表于 2021-9-11 22:56
可以抄啊 但你要明白代码就可以
netspirit 发表于 2021-9-11 23:19
贴吧建议爬手机端的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表