美文网首页
Python 学习——每天写点小东西-5

Python 学习——每天写点小东西-5

作者: 盐巴有点咸 | 来源:发表于2016-06-19 14:25 被阅读0次

今天的爬虫是爬取某网站的商品信息,难点在于网页浏览量的爬取,不仅需要伪造Referer,而且浏览量的获取不能直接抓取,否则会为0。此项是由js控制的,如果使用chrome浏览器,可以在network里找到有一页控制浏览量的文件。

http://jst1.58.com/counter?infoid={}

通过infoid来获取浏览量,而此参数是商品网址的一部分,所以需要从网址中提取出来。
代码入下:

from bs4 import BeautifulSoup
import requests
import time

headers = {
    'User-Agent': 'xxxxx',
    'Referer': 'xxxxx',
    'Cookie': 'xxxxx'
}

# 获取爬取页面个数以及其链接
def get_pages_num(who_sells, page_num):
    base_urls = ['http://cd.58.com/taishiji/{}/pn{}'.format(who_sells, page_num) for page_num in range(1, page_num+1)]
    return base_urls

# 获取所有链接
def get_links_from(who_sells, page_num):
    base_urls = get_pages_num(who_sells, page_num)
    links = []

    for url in base_urls:
        time.sleep(1)
        r = requests.get(url, headers=headers).text
        soup = BeautifulSoup(r, 'lxml')
        for link in soup.select('td.t > a'):
            if len(link.get('href').split('?')[0]) == 46:
                links.append(link.get('href').split('?')[0])
    return links

# 获取浏览量
def get_views(url):
    id_num = url.split('/')[-1].strip('x.shtml')
    api = 'http://jst1.58.com/counter?infoid={}'.format(id_num)
    js = requests.get(api, headers=headers)
    views = js.text.split('=')[-1]
    return views

# 获取详细信息
def get_item_info(who_sells=0, page_num=1):
    urls = get_links_from(who_sells, page_num)

    for url in urls:

        time.sleep(2)
        r = requests.get(url, headers=headers)
        soup = BeautifulSoup(r.text, 'lxml')

        title = soup.title.text
        price = soup.findAll('span', 'price c_f50')[0].text
        area = list(soup.select('.c_25d')[-1].stripped_strings)
        data = soup.select('li.time')[0].text

        data = {
            'title': title,
            'price': price,
            'data': data,
            'area': ''.join(area) if len(list(soup.select('.c_25d'))) == 2 else None,
            'cate': '个人' if who_sells == 0 else '商家',   #通过参数来判断卖家
            'views': get_views(url)
        }

        print(data)


get_item_info(page_num=3)

此代码的2个参数一个是对应卖家的,0代表个人,1代表商家,另一个是对应爬取多少页的。

相关文章

  • Python 学习——每天写点小东西-5

    今天的爬虫是爬取某网站的商品信息,难点在于网页浏览量的爬取,不仅需要伪造Referer,而且浏览量的获取不能直接抓...

  • Python 学习——每天写点小东西-6

    今天的爬虫是爬取某网站的所有链接,涉及到了MongoDB及其简单的操作,和多线程,虽然爬取的数据简单,但是能爬取这...

  • Python 学习——每天写点小东西-1

    最近开始学习python,这里就作为学习记录,记录自己的python之路。本条爬虫爬取的是糗事百科的24小时热门里...

  • Python 学习——每天写点小东西-4

    今天的爬虫比较简单,就不做详细介绍。爬取的是某网站的租房信息。 自己电脑网速太慢一直爬不完,最后使用AWS主机才爬...

  • Python 学习——每天写点小东西-3

    今天写的爬虫是为了抓去拉钩网上面的招聘信息,代码如下: 思路:在fire-bug下面发现搜索职业后会从浏览器上传了...

  • Python 学习——每天写点小东西-2

    题目来源: github-Yixiaohan 1.使用python生成200个优惠码 2.任一个英文的纯文本文件,...

  • Python 学习——每天写点小东西-7

    最近都没怎么写爬虫,主要是不知道如何能够把爬到的数据利用起来,今天就贴一个简单的爬虫。 爬取的数据不多只有几千条,...

  • 新开始

    几年之后的今天,觉得每天继续写点小东西,全当心里安慰!

  • 写点小东西

    中原焦点中16 坚持分享第1043天 22.4.14运动打卡第269天 1788h 约练618/ 这思绪啊,就在喜...

  • 每天写点东西—5

    想坚持一件事确实挺难的。 本来准备坚持每天写个几百字的,但是还不到一周,就已经有两天不想写了。 是呀,忙、累、没有...

网友评论

      本文标题:Python 学习——每天写点小东西-5

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