python爬取豆瓣250存入mongodb全纪录

用了一周的时间总算搞定了,跨过了各种坑,总算调试成功了,记录如下:

1、首先在cmd中用命令行建立douban爬虫项目

scrapy startproject douban

2、我用的是pycharm,导入项目后,

1)在items.py中定义爬取的字段

items.py代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

# -*- coding: utf-8 -*-

import scrapy

class DoubanBookItem(scrapy.Item):

    name = scrapy.Field()            # 书名

    price = scrapy.Field()           # 价格

    edition_year = scrapy.Field()    # 出版年份

    publisher = scrapy.Field()       # 出版社

    ratings = scrapy.Field()         # 评分

    author = scrapy.Field()          # 作者

    content = scrapy.Field()

  

2)在spiders文件夹下建立一个新的爬虫bookspider.py,爬取网页的代码都在这里写。

以下是爬虫bookspider.py代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

# -*- coding:utf-8 -*-

import scrapy

from douban.items import DoubanBookItem

class BookSpider(scrapy.Spider):

    name = ‘douban-book‘

    allowed_domains = [‘douban.com‘]

    start_urls = [

        ‘https://book.douban.com/top250‘

    ]

    def parse(self, response):

        # 请求第一页

        yield scrapy.Request(response.url, callback=self.parse_next)

        # 请求其它页

        for page in response.xpath(‘//div[@class="paginator"]/a‘):

            link = page.xpath(‘@href‘).extract()[0]

            yield scrapy.Request(link, callback=self.parse_next)

    def parse_next(self, response):

        for item in response.xpath(‘//tr[@class="item"]‘):

            book = DoubanBookItem()

            book[‘name‘= item.xpath(‘td[2]/div[1]/a/@title‘).extract()[0]

            book[‘content‘= item.xpath(‘td[2]/p/text()‘).extract()[0]

            # book_info = item.xpath("td[2]/p[1]/text()").extract()[0]

            # book_info_content = book_info.strip().split(" / ")

            # book["author"] = book_info_content[0]

            # book["publisher"] = book_info_content[-3]

            # book["edition_year"] = book_info_content[-2]

            # book["price"] = book_info_content[-1]

            book[‘ratings‘= item.xpath(‘td[2]/div[2]/span[2]/text()‘).extract()[0]

            yield book

3)在settings.py文件中配置请求头及mongodb信息

from faker import Factoryf = Factory.create()USER_AGENT = f.user_agent()
DEFAULT_REQUEST_HEADERS = {    ‘Host‘: ‘book.douban.com‘,‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘,‘Accept-Language‘: ‘zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3‘,‘Accept-Encoding‘: ‘gzip, deflate, br‘,‘Connection‘: ‘keep-alive‘,}

1

2

3

4

<br data-filtered="filtered">MONGODB_HOST = "127.0.0.1" //在本机调试就这个地址

MONGODB_PORT = 27017   //默认端口号

MONGODB_DBNAME = "jkxy"  //数据库名字

MONGODB_DOCNAME = "Book"   //集合名字,相当于表名

  

4)在pipelines.py中编写处理代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# -*- coding: utf-8 -*-

# form scrapy.conf import settings  已经过时不用了,采用下面的方法引入settings

from scrapy.utils.project import get_project_settings  //因mongodb的host地址,端口号等都在settings中配置的,所以要把该文件导入进来。

settings = get_project_settings()

import pymongo  //导入mongodb连接模块

class DoubanBookPipeline(object):

    def __init__(self):

        host = settings["MONGODB_HOST"]  //从settings中取出host地址

        port = settings["MONGODB_PORT"]

        dbname = settings["MONGODB_DBNAME"]

        client = pymongo.MongoClient(host=host,port=port) // 创建一个MongoClient实例

        tdb = client[dbname]   //创建jkxy数据库,dbname=“jkxy”

        self.post = tdb[settings["MONGODB_DOCNAME"]]  //创建数据库集合Book,相当于创建表

    def process_item(self, item, spider):

        info = item[‘content‘].split(‘ / ‘)  # [法] 圣埃克苏佩里 / 马振聘 / 人民文学出版社 / 2003-8 / 22.00元

        item[‘name‘= item[‘name‘]

        item[‘price‘= info[-1]

        item[‘edition_year‘= info[-2]

        item[‘publisher‘= info[-3]

        bookinfo = dict(item)  //将爬取的数据变为字典

        self.post.insert(bookinfo)  //将爬取的数据插入mongodb数据库

        return item

  

  3、在cmd中进入douban项目spiders目录,输入scrapy runspiders bookspider.py,运行编写的爬虫

至此大功告成!

以下是在mongodb中爬取的数据图

感想:

1、pycharm不能直接建立scrapy项目,需要在cmd中用命令scrapy startproject douban建立,

2、同样,在pycharm中如果不配置的话,直接点运行也没有用(一开始不知道怎么回事,点了运行,提示成功了,但是数据库里啥东西也没有,后来上网查了才发现要在cmd中用scrapy命令才行),但也有文章说在pycharm中设置一下就可以运行了,但我没试成功。

3、网上查到的在cmd下先进入项目目录,用命令scrapy crawl 项目名,我就在cmd目录下用scrapy crawl douban,但我试了多次都不行。

以为是不是crawl命令不对,就在cmd下输入scrapy -h查看一下都有啥命令,里面没有crawl命令,但是有一个runspiders 命令,就尝试进入spiders目录,直接运行bookspider.py,至此终于成功。

原文地址:https://www.cnblogs.com/menghome/p/8322328.html

时间: 2024-09-28 21:27:56

python爬取豆瓣250存入mongodb全纪录的相关文章

利用Python爬取豆瓣电影

目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE 有3个字段是非常重要的: 1.sort=T 2.range=0,10 3.tag

python爬取豆瓣小组700+话题加回复啦啦啦python open file with a variable name

需求:爬取豆瓣小组所有话题(话题title,内容,作者,发布时间),及回复(最佳回复,普通回复,回复_回复,翻页回复,0回复) 解决:1. 先爬取小组下,所有的主题链接,通过定位nextpage翻页获取总过700+条话题: 2. 访问700+ 链接,在内页+start=0中,获取话题相关的四部分(话题title,内容,作者,发布时间),及最佳回复.回复: 3. 在2的基础上,判断是否有回复,如果有回复才进一步判断是否有回复翻页,回复翻页通过nextpage 获取start=100.start=2

Python 爬取豆瓣TOP250实战

学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看. 可以看到每部电影都有比较全面的简介.其中包括电影名.导演.评分等. 接下来,我们就爬取这些数据,并将这些数据制成EXCEL表格方便查看. 首先,我们用requests库请求一下该网页,并返回他的text格式. 请求并返回成功! 接下来,我们提取我们所需要的网页元素. 点击“肖申克救赎”的检查元素. 发现它在div class = "hd" -> span class = "

团队-Python 爬取豆瓣电影top250-需求分析

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块

python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P 第二页url https://movie.douban.com/subject/26752088/comments?sta

用Python爬取豆瓣Top250的电影标题

所以我们可以这么写去得到所有页面的链接我们知道标题是在 target="_blank"> 标题的位置</a> 之中 所以可以通过正则表达式找到所有符合条件的标题 将内容写入到表格保存起来 下面贴入完整代码 import requests, bs4, re, openpyxl url = 'https://www.douban.com/doulist/3936288/?start=%s' urls = [] 多少页 pages = 10 for i in range(p

python爬取豆瓣首页热门栏目详细流程

记录一下爬取豆瓣热门专栏的经过,通过这篇文章,你能学会requests,HTMLParser,json的基本使用,以及爬取网页内容的基本思路. 使用模块 1,获取豆瓣首页代码:首先我们需要访问豆瓣页面,获取首页的源码.这里推荐使用第三方库:requests,相比python内置的 urllib 模块,requests使用起来更简单,功能更全面 2,对获取的代码进行解析:对于解析html代码,已经有很多功能强大的框架能使用,如Scrapy,PySpider,Beautiful Soup等,这里我们

python爬取豆瓣电影首页超链接

什么是爬虫?  我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了. 代码: 1 from urllib import request 2 from collections import de

python日常—爬取豆瓣250条电影记录

# 感兴趣的同仁可以相互交流哦 import requests import lxml.html,csv doubanUrl = 'https://movie.douban.com/top250?start={}&filter=' def getSource(doubanUrl): response = requests.get(doubanUrl) # 获取网页 response.encoding = 'utf-8' # 修改编码 return response.content #获取源码 d