鱼C论坛

 找回密码
 立即注册
查看: 1542|回复: 7

百度贴吧抓取问题

[复制链接]
发表于 2020-7-16 19:29:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决
我前几天还可以爬百度贴吧,,今天不行了,,,,
url =https://tieba.baidu.com/f?kw=%E6%9D%8E%E6%AF%85&mo_device=1&pn=0&      那位大神看下 谢谢了
加上cookie都抓不到数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 19:30:56 | 显示全部楼层
发代码……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-16 19:33:34 | 显示全部楼层
import requests
from lxml import etree



class TiebaSpider:
    def __init__(self,tieba_name):
        self.start_url='https://tieba.baidu.com/f?kw='+tieba_name+'&mo_device=1&pn=30&'
        self.headers={
            'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36',
            'Cookie':'BAIDUID=3910AAC3648F83F7C91FF62BFEEA3A5B:FG=1; PSTM=1594791849; BIDUPSID=A2C9C50B4451698E8184A5127F79101E; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; TIEBA_USERTYPE=6a1d9b62b655485ece22e331; TIEBAUID=cb23caae14130a0d384a57f1; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1594843199; st_key_id=17; wise_device=0; mo_originid=2; IS_NEW_USER=c6ccba2c6228269eac804531; BAIDU_WISE_UID=wapp_1594843363615_668; USER_JUMP=-1; CLIENTHEIGHT=854; CLIENTWIDTH=505; SEENKW=%E6%9D%8E%E6%AF%85%23%C0%EE%D2%E3; LASW=438; tb_as_data=4456f8ecf42b3af3a51ef6ea935a01f27d2a7a870cccced869901a220fce8c7c96cadfab4b8a09ab92f3b8b2ee59517fc9171f24849c9ac8c876069a8f0fce82e8316b8b7aa12a7d91f45f4bdabb157527bdbea2a9a9c34951b455c83aabb44dc5eb764996c71d96871c92136257eca5; Hm_lpvt_98b9d8c2fd6608d564bf2ac2ae642948=1594843579; st_data=d1c224669d51a4f51e54c234cfd7fe5dc27d3abd9093bfde2c26d005e01a4983a767a2283682899a336c9984c0ef2a7040e18c05fe4e46f1af81e114fe504bcdd9dbc90a669bca7e765bffc8bb9e82758f3fd788ae2fe18bac7df53c4ccc45ac375988682f4e7ecbc4780269fe01be9b745511ca7bcce149c6fc7ea4c104624a; st_sign=814136cd'
        }

    def parse_url(self,url):
        response=requests.get(url,headers=self.headers,verify=False)
        rel=response.content.decode()
        with open('baidutieba.html','w',encoding='utf-8') as f:
            f.write(rel)
            print('ok')
        return rel

    def get_content_list(self,html_str):
        html=etree.HTML(html_str)


    def run(self):
        #1 start_url
        #2 发送请求 获取响应
        html_str=self.parse_url(self.start_url)
        #3 提取数据 提取下一页的URL地址
           #3.1  提取列表中的url地址和标题
           #3.2  请求别表中的url地址 获取详情页的第一页
           #3.3  提取详情页第一页的图片,提取下一页的url地址
           #3.4  请求下一页 进入循环 3.2---3.4

        # 保存数据
        # 请求下一页的url地址 进入循环2-5步


if __name__ == "__main__":
    baidu=TiebaSpider('李毅')
    baidu.run()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-16 19:34:19 | 显示全部楼层
只写了个框,,,写到这调试都没过去  取不到要的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-16 21:25:14 | 显示全部楼层
贴吧这段时间反爬更强了好像,我之前的代码也无效了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-17 00:18:32 | 显示全部楼层
本帖最后由 suchocolate 于 2020-7-17 00:31 编辑

用爬美女吧图片的代码可以爬李毅吧的图
import requests
from lxml import etree
import os


# 主函数
def main(num):
    # 检查目录
    ckdir()
    # 图片计数
    n = 1
    # 逐页下载
    for x in range(num):
        # 第一页的url和其他页不同
        if x == 0:
            url = url1
        else:
            url = url2 + str(x * 50)
        imgs = get_url(url)
        print('开始下载第' + str(x + 1) + '页')
        n = dl_img(imgs, n)
    print('下载完成,共下载' + str(n) + '张')


# 创建存储图片的目录,可根据喜好更改名称
def ckdir():
    if not os.path.isdir('pics'):
        os.mkdir("pics")


# 分析页面图片的url
def get_url(url):
    # 登陆论坛页面
    r = requests.get(url, headers=headers)
    html = etree.HTML(r.text)
    # 过滤出贴子url
    result1 = html.xpath('//div[contains(@class, "threadlist_title")]/a/@href')
    img_urls = []
    # 进入各个贴子
    for sfx in result1:
        r = requests.get(base_url + sfx, headers=headers)
        print('获取页面' + sfx + '的图片地址...')
        html = etree.HTML(r.text)
        # 查找贴子内的图片链接
        result2 = html.xpath('//img[@class="BDE_Image"]/@src')
        # 如果有图片连接,放入到图片链接列表
        if result2:
            img_urls.extend(result2)
    return img_urls


# 下载图片
def dl_img(img_urls, n):
    num = str(len(img_urls))
    print('有' + num + '张照片要下载。')
    # 遍历图片链接列表
    for img in img_urls:
        r = requests.get(img, headers=headers)
        pic_name = img.split('/')[-1]
        with open('pics\\' + pic_name, 'wb') as f:
            f.write(r.content)
        print('已下载' + pic_name + ',共下载' + str(n) + '张。')
        n = n + 1
    return n


if __name__ == '__main__':
    # 设置基础参数
    headers = {'user-agent': 'firefox'}
    # url1是李毅吧的网址,可根据需要自行更换其他贴吧,复制浏览器地址,粘贴到这里即可
    url1 = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E6%9D%8E%E6%AF%85&fp=0'
    # url2是李毅吧非第一页的网址,后面的字稍有变化,大家自行更换
    url2 = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E6%9D%8E%E6%AF%85&pn='
    base_url = 'https://tieba.baidu.com'
    page_num = input('请问你想下载几页的贴子的图片:')
    page_num = int(page_num)
    main(page_num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-17 19:02:14 | 显示全部楼层
这个代码依然不行,,看来贴吧反爬做的越来越好了
微信图片_20200717190052.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-19 17:13:19 | 显示全部楼层
wzdyjn 发表于 2020-7-17 19:02
这个代码依然不行,,看来贴吧反爬做的越来越好了


这个是你的python对ssl的警告,verify关掉,35行:
r = requests.get(url, headers=headers, verify=False)
我这里用这个代码可以下载出图片:
lytb-2.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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