使用lxml的css选择器用法爬取奇书网并保存到mongoDB中

import requests
from lxml import etree
from fake_useragent import UserAgent
import pymongo
class QiShuSpider(object):
    def __init__(self):
        self.base_url="https://www.qisuu.la/soft/sort01/"
        self.headers={
            "User-Agent":UserAgent().random,
            "HOST":"www.qisuu.la",
            "Referer":"https://www.qisuu.la",
        }

    def get_index_code(self):
        #声明一个变量,记录重连的次数
        retry_link_count=0
        while True:
            try:
                response=requests.get(self.base_url,headers=self.headers)
                # print(response.text)
            except Exception as e:
                print("连接奇书网失败,原因是:",e)
                print("正在尝试第{}次重连....".format(retry_link_count))
                retry_link_count+=1
                if retry_link_count>=5:
                    print("尝试连接次数已经达到五次,停止连接")
                    break
            else:
                html_obj=etree.HTML(response.text)
                # print(response.text)
                #获取option这个标签列表
                option_list=html_obj.cssselect("select>option")
                return option_list

    def get_every_page_code(self):
        option_list=self.get_index_code()
        for option in option_list:
            value=option.get("value")
            #拼接每一页的完整地址
            base_url="https://www.qisuu.la"+value
            print("正在爬取{}链接".format(base_url))
            response=requests.get(base_url,headers=self.headers).text
            html_obj=etree.HTML(response)
            #获取每一本小数所在的a标签的一个列表
            a_list=html_obj.cssselect(".listBox li>a")
            for a in a_list:
                novel_href=a.get("href")
                #拼接每一本小说的完整地址
                novel_url="https://www.qisuu.la"+novel_href
                print("正在爬取链接为{}的小说".format(novel_url))
                self.parse_every_novel(novel_url)
    def parse_every_novel(self,novel_url):
        reponse=requests.get(novel_url,headers=self.headers)
        reponse.encoding="utf-8"
        html_obj=etree.HTML(reponse.text)
        novel_name=html_obj.cssselect(".detail_right>h1")[0].text
        clik_num=html_obj.cssselect(".detail_right>ul>li:nth-child(1)")[0].text
        novel_size=html_obj.cssselect(".detail_right>ul>li:nth-child(2)")[0].text
        novel_type=html_obj.cssselect(".detail_right>ul>li:nth-child(3)")[0].text
        update_time = html_obj.cssselect(".detail_right>ul>li:nth-child(4)")[0].text
        novel_status = html_obj.cssselect(".detail_right>ul>li:nth-child(5)")[0].text
        novel_author = html_obj.cssselect(".detail_right>ul>li:nth-child(6)")[0].text
        novel_run_envir=html_obj.cssselect(".detail_right>ul>li:nth-child(7)")[0].text
        novel_lasted_chapter=html_obj.cssselect(".detail_right>ul>li:nth-child(8)>a")[0].text
        dict_novel={"小说名称":novel_name,"点击次数":clik_num,"小说大小":novel_size,"小说类型":novel_type,"更新时间":update_time,"小说状态":novel_status,"小说作者":novel_author,"小说运行环境":novel_run_envir,"小说最新章节":novel_lasted_chapter}
        collection.insert_one(dict_novel)

    def start_spider(self):
        self.get_every_page_code()

if __name__ == ‘__main__‘:
    client = pymongo.MongoClient(host="localhost", port=27017)
    db = client.novel
    collection = db.novel
    spider=QiShuSpider()
    spider.start_spider()

原文地址:https://www.cnblogs.com/chensang/p/10099088.html

时间: 2024-07-30 07:18:52

使用lxml的css选择器用法爬取奇书网并保存到mongoDB中的相关文章

Scrapy 爬虫实例 抓取豆瓣小组信息并保存到mongodb中

这个框架关注了很久,但是直到最近空了才仔细的看了下 这里我用的是scrapy0.24版本 先来个成品好感受这个框架带来的便捷性,等这段时间慢慢整理下思绪再把最近学到的关于此框架的知识一一更新到博客来. 先说明下这个玩具爬虫的目的 能够将种子URL页面当中的小组进行爬取 并分析出有关联的小组连接 以及小组的组员人数 和组名等信息 出来的数据大概是这样的 {    'RelativeGroups': [u'http://www.douban.com/group/10127/',           

1.scrapy爬取的数据保存到es中

先建立es的mapping,也就是建立在es中建立一个空的Index,代码如下:执行后就会在es建lagou 这个index. from datetime import datetime from elasticsearch_dsl import DocType, Date, Nested, Boolean, \ analyzer, InnerDoc, Completion, Keyword, Text, Integer from elasticsearch_dsl.connections im

Scrapy爬虫(5)爬取当当网图书畅销榜

??本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下: ??我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲,可以参考上一篇博客,我们只需要修改items.py文件,以及新建一个爬虫文件BookSpider.py. ??items.py文件的代码如下,用来储存每本书的排名,书名,作者,出版社,价格以及评论数. import scrapy class BookspiderItem(scrapy.Item):

Python爬虫项目--爬取自如网房源信息

本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http://hz.ziroom.com/z/nl/z3.html?p=2 的p参数控制分页 2. get请求 2.获取单页源码 1 # -*- coding: utf-8 -*- 2 import requests 3 import time 4 from requests.exceptions import

实现多线程爬取数据并保存到mongodb

多线程爬取二手房网页并将数据保存到mongodb的代码: import pymongo import threading import time from lxml import etree import requests from queue import Queue index_url='https://m.lianjia.com/gz/ershoufang/pg{}/' detail_url='https://m.lianjia.com{}' # 设置爬取主页的页数 INDEX_PAGE_

python爬虫案例-爬取当当网数据

输入关键字,爬取当当网中商品的基本数据,代码如下: 1 # Author:K 2 import requests 3 from lxml import etree 4 from fake_useragent import UserAgent 5 import re 6 import csv 7 8 9 def get_page(key): 10 for page in range(1,50): 11 url = 'http://search.dangdang.com/?key=%s&act=in

爬取赶集网二手物品下所有物品的信息

四周爬虫课第二周的练习,爬取赶集网二手物品下所有物品的信息.大致思路:1.爬取频道页url:2.爬取商品详情页url,写入mongodb,url_list表:3.从url_list表读取url,爬取商品信息,写入mongodb,p_info表 分成3个py文件:1.channel_url.py,获取频道页url:2.page_parse.py,主要是2个爬虫函数,分别完成2个数据表的写入:3.main.py,主程序文件,也就是本文件,开启多进程,完成整个工作 最后顺利完成任务,感觉现在赶集真不行

使用python爬取东方财富网机构调研数据

最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了javascript网络访问,然后将服务器返回的数据插入网页,无法通过网址直接获取对应页的的页面数据. 通过chrome的开发者工具,我们可以看到点击下一页按钮背后发起的网页访问: 在点击下一页时,浏览器向地址发起了访问.我们分析一下这个地址的结构: http://data.eastmoney.co

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(