这里我爬取京东手机价格作为事例
timg.jpg
最近刚出了iPhone X,1W元的价格有点实(guo)惠(fen),刘海也很“漂(chou)亮(lou),所以我还是看看国产手机吧,正好闲来无事,就写了一段爬取京东2800—4499元的手机价格,看看有哪些自己喜欢的。
使用工具:火狐浏览器,httpfox
1.找到网址,翻个几页
2.打开网页源代码,找到如图所示的信息
1.png
3.提取需要的信息
phone_html = soup.find_all(name = 'div', attrs = {'class':"p-name"})
4.点击进入某个手机链接,打开网页源代码发现并没有手机价格
只能继续使用httpfox,找到如图所示的信息:
2.png
p对应着价格,2999元,所以我们可以继续开始写我们的代码了。
5.代码如下:
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests
import re
def shouji_list():
phonename = dict()
for i in range(1, 3):#采集1到2页的手机价格
url = 'https://list.jd.com/list.html?cat=9987,653,655&ev=exprice%5FM2800L4499&page='+str(i)+'&sort=sort%5Frank%5Fasc&trans=1&JL=6_0_0&ms=6#J_main'
url_session = requests.Session()
#会话对象requests.Session能够跨请求地保持某些参数,比如cookies,即在同一个Session实例发出的所有请求都保持同一个cookies,而requests模块每次会自动处理cookies
#这样就很方便地处理登录时的cookies问题。在cookies的处理上会话对象一句话可以顶过好几句urllib模块下的操作。
req = url_session.get(url).text
soup = BeautifulSoup(req, 'html.parser')
phone_html = soup.find_all(name = 'div', attrs = {'class':"p-name"})#查看网页源代码得到的关键信息
for item in phone_html:
for link in item.find_all('a'):
shouji_html = str(link.get('href')[14:-5])#取得每个手机网址的关键信息
phonename[shouji_html] = link.get_text().strip()#将价格和网址对应,组成一个字典
return phonename
if __name__ == '__main__':
price = shouji_list()
price_txt = open('phone_prcie.txt', 'w')
for num in price:
price_url = 'https://p.3.cn/prices/mgets?callback=jQuery6983933&type=1&area=1_72_2799_0&pdtk=&pduid=14995199449641080515414&pdpin=&pin=null&pdbp=0&skuIds=J_'+str(num)+'&ext=11000000&source=item-pc'
#这个网址是难点,要在后台里面查找
url_session = requests.Session()
price_req = url_session.get(price_url).text
price_soup = re.findall(r'"p":"(.*?)"', price_req)
for i in price_soup:
shouji_data = price[num].encode('utf-8')
price_txt.write(shouji_data+':'+str(i)+'\n')
print str(shouji_data) + ':' + str(i) + '\n'
price_txt.close()
我创建了一个txt,将手机价格保存了下来,下图是输出:
3.png
再次申明,iPhone X真心很漂(chou)亮(bao),我们还是买小米Mix2吧