Python爬虫分享【1】

python爬虫连载分享【1】

目标:爬取58同城商品的标题,地区,分类,时间,浏览量。

工具:requests,beautifulsoup

涉及问题:浏览量的爬取

导入必要模块

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests
import json
url='http://xa.58.com/pbdn/0/'
获取特定页的所有链接
def get_links_from(who_sells):    
  urls=[]    
  list_view='http://bj.58.com/pbdn/% s/'%(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(link.get('href'))    
return urls

获取浏览量

def get_views_from(url):
      id = url.split('/')[-1].split('?')[0].strip('x.shtml')
      api='http://jst1.58.com/counter?infoid=%s'%(id)
      header = {
      'User-Agent':xxx
      'Referer':xxx
      'Cookie':xxx
      js = requests.get(api, headers=header)
      views = js.text.split('=')[-1]
      return views
    ```
获取每页的信息

def get_items_info(who_sells=0):
urls = get_links_from(who_sells)
for url in urls:
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
data = dict(title=soup.title.text, price=soup.select('.price')
[0].text,
area=list(soup.select('span.c_25d')[0].stripped_strings) if
soup.find_all('span','c_25d') else None,
cate='个人' if who_sells == 0 else '商家',
views=get_views_from(url),
time=soup.find('li', class_='time').text)
print json.dumps(data, ensure_ascii=False, encoding='UTF-
8')

所有的代码如上所示,值得一提的是浏览量的抓取并没有那么简单。如果按照标签直接抓取,会是0,因为js控制的原因。
如果弄chrome浏览器,可以在network里找到有一页控制浏览量的文件。
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2033563-8f156c76fd4e439a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在右边的preview我们可以看到浏览量如下:

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2033563-080cae5988d364f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
于是断定浏览量被此url进行控制,在header中加入referer


![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2033563-05ee0a73eb0b0892.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
便可获取浏览量。
为了对付反盗链,需要伪造的referer:
防盗链就是需要在请求的头部加入Referer字段, Referer 指的是HTTP头部的一个字段, 用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
更多关于Referer:http://bindog.github.io/blog/2014/11/18/http-referer-security-and-anti-anti-hotlink/

你可能感兴趣的:(Python爬虫分享【1】)