Python 爬虫学习4
2017-03-06 19:31
351 查看
任务:爬取58页面中的正常商品,每个商品详情页中的类目、标题、发帖时间、价格、成色、区域、浏览量信息
注意:多开反爬取、看是个人还是商家(url中的0和1)
详情页中的标题
待改进,'http://bj.58.com/pingbandiannao/{}/pn2,这是第二页的,第一页的每个详情页的链接爬不了(问题出在第一页趴下来的关于详情页链接有问题,第一页不同于后面页,后面页也有不同的,都是截取链接时要注意截取的标志是什么),浏览量还没成功
注意:多开反爬取、看是个人还是商家(url中的0和1)
详情页中的标题
待改进,'http://bj.58.com/pingbandiannao/{}/pn2,这是第二页的,第一页的每个详情页的链接爬不了(问题出在第一页趴下来的关于详情页链接有问题,第一页不同于后面页,后面页也有不同的,都是截取链接时要注意截取的标志是什么),浏览量还没成功
from bs4 import BeautifulSoup import requests headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' } # url = 'http://bj.58.com/pingbandiannao/26062681492781x.shtml' # wb_data = requests.get(url) # soup = BeautifulSoup(wb_data.text, 'lxml') def get_links_from(who_sells): #在列表页获取链接 urls = [] url = 'http://bj.58.com/pingbandiannao/{}x.shtml' list_view = 'http://bj.58.com/pingbandiannao/{}/pn1/'.format(str(who_sells)) wb_data = requests.get(list_view) soup = BeautifulSoup(wb_data.text, 'lxml') for link in soup.select('td.t a.t'): urls.append(url.format(link.get('href').split('=')[-1].split('_')[0]) ) #指定字符串以?分为两部分,因为第一页和后续页数有不同的格式,所以找到他们之间通用的格式 return urls # print(urls) ''' http://bj.58.com/pingbandiannao/29292515289012x.shtml?psid=159059162195147270219031821&entinfo=29292515289012_0 http://bj.58.com/pingbandiannao/26213204416840x.shtml?psid=159059162195147270219031821&entinfo=26213204416840_0&iuType=p_1&PGTID=0d305a36-0000-1fe0-6998-6f094bc793e8&ClickID=1 ''' def get_views_from(url): id = url.split('/')[-1].strip('x.shtml') #获取每一个详情页的唯一特性 api = 'http://jst1.58.com/counter?infoid={}'.format(id) js = requests.get(api, headers=headers) views = js.text.split('=')[-1] return views # print(views) def get_item_info(who_sells=1): #详情页,who_sells = 1 是商家 urls = get_links_from(who_sells) for url in urls: wb_data = requests.get(url) soup = BeautifulSoup(wb_data.text, 'lxml') title = soup.title.text #直接在标题中找 price = soup.select('span.price') #大型网络直接copy的select太复杂,采取简化,详情页简单,“#”代表id print(price) date = soup.select('.time') view = soup.select('em#totalcount') # area = soup.select('span.c_25d') data = { #转转网的几个参数会不同,目前不考虑转转网的 'title':title, 'price':soup.select('span.price')[0].text, #单一元素,一个列表中只有一个元素,取出来的是标签,进行text 'date':date[0].text, 'area':list(soup.select('.c_25d')[0].stripped_strings) if soup.find_all('span','c_25d') else None, 'cata':'个人'if who_sells == 0 else'商家', #分类,商家还是个人 'views':get_views_from(url) #浏览量,js请求,浏览量在source中 } print(data) # get_item_info(url) # get_links_from(1) # get_views_from(url) get_item_info()
相关文章推荐
- Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)
- 【爬了个爬——学习Python网络爬虫】1.抓取页面
- Python 爬虫如何入门学习?
- Python 爬虫学习 urllib
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- Python学习笔记之网络爬虫
- 【python爬虫学习经历一】
- python爬虫学习(一)
- Python 学习入门(6)—— 网页爬虫
- Python 爬虫学习 网页图片下载
- python基础学习-7(简单爬虫)
- python 爬虫学习一
- Python 学习入门(6)—— 网页爬虫
- Python 爬虫如何入门学习?
- 使用python2.7学习网络爬虫,问题锦集
- 【爬了个爬——学习Python网络爬虫】0.写在前面的话
- 学习python爬虫
- Python 网页爬虫-BeautifulSoup库的学习
- Python 基础学习 网络小爬虫
- [Python]网络爬虫学习笔记,爬取东南大学SEU-wlan的流量使用情况