一、安装python(windows/linux)
详细安装方法:请自行百度安装python,官方网址:www.python.org
安装完python之后在cmd或者terminal输入python/python3
windows:
linux:
二、python爬虫所需包或插件
- requests(点击查看官方文档)作用:请求网页结构
- BeautifulSoup4(点击查看官方文档)作用:分析html
- pip安装上方两个包都需要用到pip
详细安装方法:
1.首先检测是否含有pip,在cmd或者terminal输入 pip 下方以windows为例
出现这种代表安装成功,如果没有出现则输入
python -m pip install --upgrade pip
等待安装成功
2.安装requests
pip install requests
3.安装BeautifulSoup4
pip install BeautifulSoup4
我这里已经安装好了所以不再进行图片展示,如有不会,请自行百度requests、BeautifulSoup4安装
上述包安装完毕之后检测是否安装成功,按照下方命令操作,如果没有报错则代表安装成功
三、爬取某东电脑销量、价格、名称等数据
- 分析我们需要什么
- 分析网页代码
- 编写python代码
详细操作流程
1.我们需要 标题、价格、店铺名称
2.分析网页结构
发现规律电脑列表统一class名称为 gl-item
利用requests首先要知道网页信息:Request URL \ Request Method
3.编写代码(新建 jd.py )
import requests #引入requests #要爬的url url = 'https://list.jd.com/list.html?cat=670%2C671%2C672&go=0' #访问及定义编码 res = requests.get(url) res.encoding = 'utf-8' print(res.text)
cmd执行python jd.py出现html即为成功,如下图所示
利用BeautifulSoup拿到我们需要的class内信息,到此刻已经能够拿到初始数据,但需要优化
这里需要利用html5lib包,安装方法:
pip install html5lib
import requests #引入requests from bs4 import BeautifulSoup #引入网页分析 #要爬的url url = 'https://list.jd.com/list.html?cat=670%2C671%2C672&go=0' #访问及定义编码 res = requests.get(url) res.encoding = 'utf-8' #利用BeautifulSoup分析网页为html5,需要安装html5lib soup = BeautifulSoup(res.text, 'html5lib') print(soup.select('.gl-item'))
再次查看网页发现,我们需要 .gl-item 内的 <i></i>标签和<em></em>标签
编写代码
import requests #引入requests from bs4 import BeautifulSoup #引入网页分析 #要爬的url url = 'https://list.jd.com/list.html?cat=670%2C671%2C672&go=0' #访问及定义编码 res = requests.get(url) res.encoding = 'utf-8' #利用BeautifulSoup分析网页为html5,需要安装html5lib soup = BeautifulSoup(res.text, 'html5lib') #循环我们得到的数据,拿到需要的数据 for item in soup.select('.gl-item'): try: print(item.select('.J_price i'), item.select('.p-name em')) except OSError: pass continue
执行 python jd.py会发现没有价格,这里就涉及到requests头信息了,某东的反扒机制,要传浏览器头模仿一个真实访客
在上方代码添加headers头信息,发现就算加上头部信息,爬出来的还是没有价格,退而求其次去京东搜索页面爬取
import requests #引入requests from bs4 import BeautifulSoup #引入网页分析 #要爬的url url = 'https://list.jd.com/list.html?cat=670%2C671%2C672&go=0' #设置访客头信息 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36", } #访问及定义编码 res = requests.get(url, headers = headers) res.encoding = 'utf-8' #利用BeautifulSoup分析网页为html5,需要安装html5lib soup = BeautifulSoup(res.text, 'html5lib') #循环我们得到的数据,拿到需要的数据 for item in soup.select('.gl-item'): try: print(item.select('.J_price i'), item.select('.p-name em')) except OSError: pass continue
退而求其次去搜索页面爬取,重复上方步骤,分析页面、编写代码
import requests #引入requests from bs4 import BeautifulSoup #引入网页分析 #要爬的url url = 'https://search.jd.com/search?keyword=%E8%81%94%E6%83%B3%E6%8B%AF%E6%95%91%E8%80%85&enc=utf-8&qrst=1&rt=1&stop=1&spm=a.0.0&vt=2&bs=1&ev=exbrand_%E8%81%94%E6%83%B3%EF%BC%88Lenovo%EF%BC%89%5E&cid3=672' #设置访客头信息 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36", } #访问及定义编码 res = requests.get(url, headers=headers) res.encoding = 'utf-8' #利用BeautifulSoup分析网页为html5,需要安装html5lib soup = BeautifulSoup(res.text, 'html5lib') #循环我们得到的数据,拿到需要的数据 for item in soup.select(".gl-item"): try: print(item.select("i")[0].text, item.select("em")[1].text) for item2 in item.select("span.J_im_icon"): print(item2.select("a")[0].text) except OSError: pass continue
至此大功告成 价格、标题、店铺都已经拿到,即可进行下一步操作,比如存库