美文网首页
Python爬虫分享【1】

Python爬虫分享【1】

作者: NILSTARK | 来源:发表于2016-05-14 20:01 被阅读139次

    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](https://img.haomeiwen.com/i2033563/8f156c76fd4e439a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    在右边的preview我们可以看到浏览量如下:
    
    ![Paste_Image.png](https://img.haomeiwen.com/i2033563/080cae5988d364f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    于是断定浏览量被此url进行控制,在header中加入referer
    
    
    ![Paste_Image.png](https://img.haomeiwen.com/i2033563/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】

          本文链接:https://www.haomeiwen.com/subject/sotvrttx.html