python scrapy框架爬艺龙动态评论

python scrapy框架爬艺龙动态评论

本人用的是python2.7

1、安装好scrapy

安装scrapy 网上都有教程(附:http://cuiqingcai.com/912.html)

安装好scrapy之后,在cmd命令行代码的目录下运行

scrapy startproject  yourprojectname

该命令将会创建包含下列内容的目录

scrapy.cfg          项目的配置文件

items.py             项目中的item文件

pipelines.py        项目的pipelines文件

setting.py            项目的设置文件

spiders.py            放置爬虫代码的目录

2、定义items文件

其中,imformation是我需要的酒店信息,content是酒店评论,time是评论时间

3、编写爬虫文件

Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类。

其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。

为了创建一个Spider,您必须继承 scrapy.Spider 类, 且定义以下三个属性:

  • name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
  • start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
  • parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
    上代码
# -*- coding:utf-8 -*-
import urllib2
import json
import urllib
import requests
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import scrapy
from qqq.items import qqqItem

class tto(scrapy.Spider):
    name = "yilong"
    start_urls=['http://hotel.elong.com/']

    def parse(self, response):
        url = 'http://hotel.elong.com/ajax/list/asyncsearch/'
        data = {
            "listRequest.pageIndex": 1,
            "code  ": 8840502
        }
        list = []
        while True:
            d = requests.post(url, data=data)
            j = json.loads(d.text)
            p = j['value']
            q = p['hotelIds']
            q = q.split(",")
            list.append(q)
            data['listRequest.pageIndex'] += 1
            if data['listRequest.pageIndex'] == 2:
                break
        list = sum(list, [])
        print list
        list1 = []
        list2 = []
        item={}
        for q in list:
            z = 'http://hotel.elong.com/' + q
            # url1 = 'http://hotel.elong.com/ajax/detail/gethotelreviews/?hotelId=' + q
            list1.append(z)
            # list2.append(url1)
        for p in list1:
            page = urllib.urlopen(p)
            soup = BeautifulSoup(page, "html.parser")
            for tag in soup.find_all('h1', class_="breadcrumb"):
                f = tag.get_text(strip=True)
                print f
                # file = open(f + ".txt", "w")
            for tag in soup.find_all('div', id="hotelContent"):
                ff = tag.get_text()
                ff = ff.replace(" ", "")
                item['information']=ff
        for q in list:
            url1 = 'http://hotel.elong.com/ajax/detail/gethotelreviews/?hotelId=' + q
            for i in range(0, 4):
                url2 = url1 + '&recommendedType=0&pageIndex=' + str(i)
                list2.append(url2)
        print list2
        for p in list2:
            print p
            request = urllib2.Request(p)
            response = urllib2.urlopen(request)
            t = response.read()
            d = json.loads(t)
            for p in d["contents"]:
                item['content'] = p["content"].encode('utf-8')
                item['time'] = p["createTimeString"].encode('utf-8')
            yield item

注意:
name = "yilong"

这里的name一定不能重名,必须唯一!!!

因为这是运行时的名字

4、写入文件并保存即编写setting.py


我用的是火狐浏览器,所以USER_AGENT是火狐的

5、运行

1)、可以在cmd命令行代码存放的目录下输入

scrapy crawl name

这时的name 是Spider里创建的新文件里的那个唯一的name

2)、当然,cmd上看着不方便,可以创建main.py

#coding=utf-8
from scrapy import cmdline
cmdline.execute("scrapy crawl yilong".split())
main.py是在spider文件外创建的


之后就可以在本地看到成果啦


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值