import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
url = 'https://search.jd.com/'
res = requests.get(url, headers=headers)
#print(res.text)
soup = BeautifulSoup(res.text,'lxml')
imlist = soup.find_all(name="img", attrs={'width':'220','height':'220'})
#print(len(imlist))
m=1
for im in imlist:
if "src" in im.attrs:
imurl = "https:"+im.attrs['src']
else:
imurl = "https:"+im.attrs['data-lazy-img']
#存储图片
urlretrieve(imurl, "./mypic/p"+str(m)+".jpg")
m += 1
这里以京东商城页面为例,运行这段代码之后会发现 len(imlist)=0这是为什么呢?
原因是因为反爬虫机制!
反爬虫机制是指网站为了防止爬虫程序对它们的数据进行抓取而采取的一系列技术手段。
有些网站会采取反爬虫措施,例如检测请求头中的 User-Agent 字段或者 IP 地址。如果您的请求被识别为爬虫请求,那么网站可能会返回一个空的 HTML 页面或者一个不完整的 HTML 页面,这会导致 Beautiful Soup 无法正确解析页面。
所以只需要在请求的时候模拟浏览器的User-Agent请求头就好了!修改后的代码如下
#模拟浏览器的 User-Agent 请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
url = 'https://search.jd.com'
res = requests.get(url, headers=headers)
这里我们模拟的是 Chrome浏览器。这样就大功告成了!
本文探讨了在爬取京东商城页面时遇到的反爬虫问题,解释了为何`len(imlist)=0`的原因是由于网站的反爬机制。通过在请求头中添加模拟Chrome浏览器的User-Agent字段,可以成功规避这一问题,从而继续爬取页面内容。
1024

被折叠的 条评论
为什么被折叠?



