|
25鱼币
想爬取的网页:https://tieba.baidu.com/f?kw=%E5%89%83%E9%A1%BB%E7%84%B6%E5%90%8E%E6%8D%A1%E5%88%B0%E5%A5%B3%E9%AB%98%E4%B8%AD%E7%94%9F&ie=utf-8&tab=good
1用调试工具找到我要的图片
<img src="http://tiebapic.baidu.com/forum/wh%3D200%2C90%3B/sign=ad58eff4b7ec08fa26551ba569de1154/ab92f5f50ad162d9a888295706dfa9ec8b13cdb7.jpg" attr="97211" data-original="http://tiebapic.baidu.com/forum/wh%3D200%2C90%3B/sign=ad58eff4b7ec08fa26551ba569de1154/ab92f5f50ad162d9a888295706dfa9ec8b13cdb7.jpg" bpic="http://tiebapic.baidu.com/forum/w%3D580%3B/sign=974a0cf05010b912bfc1f6f6f3c6fd03/ac4bd11373f0820200f4da745cfbfbedab641b12.jpg" class="threadlist_pic j_m_pic " style="display: inline;">
标红的就是目标
然后写了一个正则去匹配,用一个网站测试
应该是没问题的
把body放进去也是没问题
最后爬到的东西不对
按理说应该有10个才对
而且爬取的图片也不对,爬到了
代码如下:
- import re
- import os
- import urllib.request
- import requests
- url = input("请输入要爬取图片的帖子url:")
- save_path = input("请输入要保存到的位置:")
- os.getcwd()
- if not os.path.exists(save_path):
- os.mkdir(save_path)
- os.chdir(save_path)
- headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
- 'cookie': 'BIDUPSID=45588421F978DE2902A1A47464D72AB3; PSTM=1609986056; BAIDUID=45588421F978DE29E3D21BB7BB5A6873:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; __yjs_duid=1_e3607a56e43709e2ca3db4147c46396a1612784778582; BAIDUID_BFESS=45588421F978DE29E3D21BB7BB5A6873:FG=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1614696427; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1614697139; __yjsv5_shitong=1.0_7_253e552513b2cf371866473b2e57fb4e5137_300_1614697145680_59.50.85.17_fe15699c; ab_sr=1.0.0_ZDRiZDU1NjAzNjRkMDUyOWE3ZTg3MWZlMjRhMGE4NzkwYmI3N2ExMzliMjY3MjIxOGIyY2EyMmMxNWQzOWFmY2UyZDZjMGFkYzVjNWZkNGQ1ZWIxMTJmYjZjM2Y0M2M2'
- }
- req = requests.get(url=url, headers=headers).text
- param = r'<img src="([^"]*\.jpg).*?>'
- piclist = re.findall(param, req)
- for each in piclist:
- img = requests.get(url=each, headers=headers).content
- file_name = each.split('/')[-1]
- print(file_name+"下载完毕!")
- with open(file_name, 'wb') as fp:
- fp.write(img)
复制代码
求路过的大佬帮忙看看
本帖最后由 suchocolate 于 2021-3-9 16:59 编辑
浏览器是经过渲染的,会有执行javascript或ajax等等,而urllib默认拿到的只是静态代码,不会渲染其中的内容,所以后有不同。
在html中,实际应该过滤bpic:
- import requests
- import re
- def main():
- url = 'https://tieba.baidu.com/f?kw=%E5%89%83%E9%A1%BB%E7%84%B6%E5%90%8E%E6%8D%A1%E5%88%B0%E5%A5%B3%E9%AB%98%E4%B8%AD%E7%94%9F&ie=utf-8&tab=good'
- headers = {'user-agent': 'firefox'}
- r = requests.get(url, headers=headers)
- pics = re.findall(r'bpic="(.*?)"', r.text)
- print(pics)
- for item in pics:
- r = requests.get(item, headers=headers)
- pic_name = item.split('/')[-1]
- with open(pic_name, 'wb') as f:
- f.write(r.content)
- if __name__ == '__main__':
- main()
复制代码
|
最佳答案
查看完整内容
浏览器是经过渲染的,会有执行javascript或ajax等等,而urllib默认拿到的只是静态代码,不会渲染其中的内容,所以后有不同。
在html中,实际应该过滤bpic:
|