百度贴吧抓取问题
【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决我前几天还可以爬百度贴吧,,今天不行了,,,,
url =https://tieba.baidu.com/f?kw=%E6%9D%8E%E6%AF%85&mo_device=1&pn=0& 那位大神看下 谢谢了
加上cookie都抓不到数据 发代码…… 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() 只写了个框,,,写到这调试都没过去取不到要的数据 贴吧这段时间反爬更强了好像,我之前的代码也无效了 本帖最后由 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/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)
这个代码依然不行,,看来贴吧反爬做的越来越好了 wzdyjn 发表于 2020-7-17 19:02
这个代码依然不行,,看来贴吧反爬做的越来越好了
这个是你的python对ssl的警告,verify关掉,35行:
r = requests.get(url, headers=headers, verify=False)我这里用这个代码可以下载出图片:
页:
[1]