用Python爬取京东商城页面图片

本文探讨了在爬取京东商城页面时遇到的反爬虫问题,解释了为何`len(imlist)=0`的原因是由于网站的反爬机制。通过在请求头中添加模拟Chrome浏览器的User-Agent字段,可以成功规避这一问题,从而继续爬取页面内容。
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浏览器。这样就大功告成了!

### 使用Python爬虫抓取京东商城商品信息 #### 准备工作 为了成功地使用 Python 抓取京东商城的商品信息,需先安装必要的库。常用的库有 `requests` 和 `BeautifulSoup` 或者更高级的框架如 Scrapy。 ```bash pip install requests beautifulsoup4 lxml ``` #### 获取目标网页内容 通过发送 HTTP 请求获取网页 HTML 文档。由于部分网站会检测并阻止自动化工具访问,因此建议设置合理的 User-Agent 头部信息模仿浏览器行为[^1]。 ```python import requests url = 'https://example.jd.com' # 替换成实际的目标URL headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } response = requests.get(url, headers=headers) html_content = response.text ``` #### 解析HTML文档提取所需数据 可以采用 BeautifulSoup 来解析返回的数据流,并从中抽取特定标签内的文本或属性值作为最终想要的结果。对于某些动态加载的内容,则可能需要用到 Selenium 这样的工具来处理 JavaScript 渲染后的页面[^2]。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'lxml') product_titles = soup.find_all('div', class_='p-name') # 假设产品名位于此类别的<div>内 for title in product_titles: print(title.get_text(strip=True)) ``` #### 应对反爬机制 一些大型站点会有严格的防护措施防止被频繁请求所拖垮服务器性能。当遇到这种情况时,可以通过增加延时、更换 IP 地址等方式降低频率;也可以考虑官方 API 接口如果开放的话,这是最理想的选择[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值