300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 爬虫实战:Requests+BeautifulSoup 爬取京东内衣信息并导入表格(python)

爬虫实战:Requests+BeautifulSoup 爬取京东内衣信息并导入表格(python)

时间:2020-10-25 18:12:08

相关推荐

爬虫实战:Requests+BeautifulSoup 爬取京东内衣信息并导入表格(python)

准备工作

假如我们想把京东内衣类商品的信息全部保存到本地,通过手工复制粘贴将是一项非常庞大的工程,此时,可以用python爬虫实现。

第一步:分析网页地址

起始网页地址

起始网页地址

/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page=1&s=56&click=1

(在这里你会看到,明明在浏览器URL栏看到的是中文,但是复制url,粘贴到记事本或代码里面,就会变成如下这样?)

在很多网站的URL中对一些get的参数或关键字进行编码,所以我们复制出来的时候,会出现问题。但复制过来的网址可以直接打开。本例子不用管这个。

那么,怎样才能自动爬取第一页以外的其他页面,打开第三页,网页地址如下,分析发现和第一页区别在于:第一页最后&page=1,第三页&page=3

我们可以想到自动获取多个网页的方法,可以for循环实现,每次循环后,page+1

第三页网址如图

/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page=3&s=56&click=1

第一步:解析代码

先选择商品

一个li标签为一个商品

然后选择具体信息

这部分自己慢慢研究网页源代码吧

第二步:代码

from bs4 import BeautifulSoupimport numpy as npimport requestsfrom requests.exceptions import RequestExceptionimport pandas as pd#读取网页def craw(url,page):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}html1 = requests.request("GET", url, headers=headers,timeout=10)html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的html=html1.textreturn htmlexcept RequestException:#其他问题print('读取error')return None#解析网页并保存数据到表格def pase_page(url,page):html=craw(url,page)html=str(html)if html is not None:soup = BeautifulSoup(html, 'lxml')"---先选择商品--"shangping=soup.select('#J_goodsList ul li')for li in shangping:"---名称---"name=li.select('.p-name.p-name-type-2 em')name=[i.get_text() for i in name]"---价格---"price = li.select('.p-price i')price = [i.get_text() for i in price]"---店铺---"shop=li.select('.p-shop a')shop= [i.get_text() for i in shop]if(len(name)!= 0)and (len(price)!= 0) and ( len(shop) != 0):#print('名称:{0} ,价格{1},店铺名:{2}'.format(name, price, shop))information=[name,price,shop]information=np.array(information)information = information.reshape(-1,3)information=pd.DataFrame(information,columns=['名称','价格','店铺'])if page == 1:information.to_csv('京东文胸数据1.csv', mode='a+', index=False) # mode='a+'追加写入else:information.to_csv('京东文胸数据1.csv', mode='a+', index=False, header=False) # mode='a+'追加写入else:print('解析error')for i in range(1,10):#遍历网页1-10url="/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page="+str(i)+"&s=56&click=1"pase_page(url,i)print('第{0}页读取成功'.format(i))print('结束')

本例子中我只选择了商品 名,价格,店铺名。你可以选择更多信息存取

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。