首页 > 其他分享 >Scrapy框架爬取豆瓣图书实例

Scrapy框架爬取豆瓣图书实例

时间:2023-06-24 16:11:26浏览次数:41  
标签:name self scrapy 爬取 item Scrapy 豆瓣 import class

douban.py

import scrapy

import time

from bs4 import BeautifulSoup
from scrapy import Request
from Scripts.ScrapyProject.items import bookItem

class DoubanSpider(scrapy.Spider):
    name = "douban"
    allowed_domains = ["book.douban.com"]
    start_urls = ["http://book.douban.com/"]

    def parse(self, response):
        soup = BeautifulSoup(response.text,'lxml')
        Booklists = soup.find_all(class_="list-col list-col5 list-express slide-item")
        for Bl in Booklists:
            booklists = Bl.find_all("li")
            for book in booklists:
                time.sleep(3)
                item = bookItem()
                name = book.find(class_="title").a.text
                item['name']=name
                author = book.find(class_="author").text
                item['author'] = author
                url = book.find(class_="title").a.attrs.get('href')
                ### 获得图书详情url后继续爬取图书详情;
                ### callback如果不写,默认回调到parse方法;
                ### meta将item传到自己写的方法中
                yield Request(url,callback=self.detailparse,meta={'item':item})


    def detailparse(self,response):
        ### 获得默认方法中的item
        item = response.meta.get('item')
        rate = response.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()').extract_first()
        item['rate'] =rate
        soup  = BeautifulSoup(response.text,'lxml')
        ### 使用string会得到None
        content = soup.find(class_="intro").text
        item['content'] = content
        yield item

item.py

import scrapy

class bookItem(scrapy.Item):

    name = scrapy.Field()
    author = scrapy.Field()
    rate = scrapy.Field()
    content = scrapy.Field()

pipelines.py

from itemadapter import ItemAdapter
import csv
import pymongo


class BookMongoPipeline:
    db_url ='mongodb://localhost:27017'
    db_name = 'Scrapy'

    def open_spider(self,spider):
        self.client = pymongo.MongoClient(self.db_url)
        self.db = self.client[self.db_name]

    def process_item(self,item,spider):
        collection = self.db[spider.name]
        data = {'书名':item['name'],'作者':item['author'],'评价':item['rate'],'推荐':item['content']}
        collection.insert_one(data)
        print('%s 数据保存成功' %(item['name']))
    def close_spider(self,spider):
        self.client.close

标签:name,self,scrapy,爬取,item,Scrapy,豆瓣,import,class
From: https://www.cnblogs.com/yigehulu/p/17501239.html

相关文章

  • ChatGPT炒股:爬取广州数据交易所网页数据
    除了贵州大数据交易所、上海数据交易所、北京数据交易所,广州数据交易所也是排名靠前的数据交易所,里面要有很多数据要素相关企业的数据产品。网站初看起来是静态页面,很简单:在ChatGPT里面输入提示词:写一段Python程序,爬取网页数据。具体步骤:在d盘创建一个excel文件,文件名称:广州数据交......
  • python爬取一些文字信息并保存到表格
    #coding:utf-8'''获取验证码自动登录'''importopenpyxlfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportSelectimporttimeimportreimportrandomimportpandasa......
  • 使用python简单的爬取图片
    importrefrombs4importBeautifulSoupimportrequestsheaders={'User-agent':'Mozilla/5.0(Linux:Android6.0;Nexus5Build/MRA58M)''ApplewebKit/537.36(KHTML,likeGecko)''Chrome/104.0.5112.81'}url=''#......
  • Python爬虫(二):写一个爬取壁纸网站图片的爬虫(图片下载,词频统计,思路)
    好家伙,写爬虫 代码: importrequestsimportreimportosfromcollectionsimportCounterimportxlwt#创建Excel文件workbook=xlwt.Workbook(encoding='utf-8')worksheet=workbook.add_sheet('url_list')#将数据写入Excel文件worksheet.write(0,0,&......
  • python 爬取原力文档日语学习资料
    参考https://blog.csdn.net/weixin_46184311/article/details/115291441代码importrequests,json,re,time,urllib.requestimporttimeimportwgetdefgetParameter(url):#获取文档参数text_response=requests.get(url=url,headers=headers).textactu......
  • Python如何爬取京东mac电脑的数据?全球HTTP代理应用
    618要来了,不买点啥总觉得少了点什么,正好我用了5 6 年的电脑想换,这可不就来活了嘛!我们用Python也能简单获取某东上的mac电脑价格。不整虚的,直接就是一个冲,来看代码:importrequestsfrombs4importBeautifulSoupdefget_jd_laptops():url="https://search.jd.com/Search......
  • 爬取图片写入时报错--添加个等待时间
    当爬取图片时报requests.exceptions.JSONDecodeError:Invalid\escape:line29column132(char62481)这个错时,在写入的时候加个等待时间就好 ......
  • 使用chrome扩展程序爬取地图数据
    偶然,想爬取城市所有的公交和地铁线路。其实通过8684网站就可以爬取到了。但是好像不够完整,就想从高德地图抓取。阿里的产品也太难了。对新手而言,只会简单的post请求显然不足以完成任务。其实不管什么网站,抽象起来就是获取数据,保存,分析而已。对简单的任务,爬虫用什么语言,就用该语......
  • python使用aiohttp通过设置代理爬取基金数据
    说到python爬虫,我们就会想到它那强大的库,很多新手小白在选择框架的时候都会想到使用Scrapy,但是仅仅停留在会使用的阶段。在实际爬虫过程中遇到反爬机制是再常见不过的,今天为了增加对爬虫机制的理解,我们就通过手动实现多线程的爬虫过程,同时引入IP代理池进行基本的反爬操作。这里我们......
  • 北京市政百姓信件分析---使用selenium爬取信件信息
    下载selenium使用管理员打开cmd'pipinstallselenium查看版本pipshowselenium下载 WebDriver驱动谷歌浏览器chromedrive:http://chromedriver.storage.googleapis.com/index.html火狐浏览器geckodriver:https://github.com/mozilla/geckodriver/releasesIE浏览器IEDr......