鱼C论坛

 找回密码
 立即注册
查看: 1729|回复: 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都抓不到数据
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 19:30:56 | 显示全部楼层
发代码……
小甲鱼最新课程 -> https://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()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-16 19:34:19 | 显示全部楼层
只写了个框,,,写到这调试都没过去  取不到要的数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-16 21:25:14 | 显示全部楼层
贴吧这段时间反爬更强了好像,我之前的代码也无效了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

用爬美女吧图片的代码可以爬李毅吧的图

  1. import requests
  2. from lxml import etree
  3. import os


  4. # 主函数
  5. def main(num):
  6.     # 检查目录
  7.     ckdir()
  8.     # 图片计数
  9.     n = 1
  10.     # 逐页下载
  11.     for x in range(num):
  12.         # 第一页的url和其他页不同
  13.         if x == 0:
  14.             url = url1
  15.         else:
  16.             url = url2 + str(x * 50)
  17.         imgs = get_url(url)
  18.         print('开始下载第' + str(x + 1) + '页')
  19.         n = dl_img(imgs, n)
  20.     print('下载完成,共下载' + str(n) + '张')


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


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


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


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

使用道具 举报

 楼主| 发表于 2020-7-17 19:02:14 | 显示全部楼层
这个代码依然不行,,看来贴吧反爬做的越来越好了
微信图片_20200717190052.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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