问答

请问如何使爬虫进行的更快?

作者:admin 2021-06-09 我要评论

爬虫小白,根据网上的代码改成了自己想爬的网页,但是很慢,请教如何使速度变快? import aiohttpimport re import urllib.request, urllib.errorimport xlwtfro...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

爬虫小白,根据网上的代码改成了自己想爬的网页,但是很慢,请教如何使速度变快?

import aiohttp
import re  
import urllib.request, urllib.error
import xlwt
from selenium import webdriver
import time
import scrapy
from scrapy.http import Request
from urllib import parse
from selenium.webdriver.chrome.options import Options
try:
    import scrapy
except: 
    !pip install scrapy
    import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings


import logging
import json

class JsonWriterPipeline(object):
    def open_spider(self, spider):
        self.file = open('test.jl', 'w')

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "\n"
        self.file.write(line)
        return item
        
class MySpider(scrapy.Spider):
    name = "haodaifu"
    allowed_domains = ['haodf.com']
    download_delay = 2
    start_urls = ['https://www.haodf.com/sitemap-zx/2020/']

    custom_settings = {
        'LOG_LEVEL': logging.WARNING,
        'ITEM_PIPELINES': {'__main__.JsonWriterPipeline': 1}, # Used for pipeline 1
        'FEED_FORMAT':'json',                                 # Used for pipeline 2
        'FEED_URI': 'testzixun.json'                        # Used for pipeline 2
    }
    
    
    parse(self, response):
        for link in response.xpath('//div[4]/div[2]/li/a[contains(text(), "2020-01")]/@href'):
            url = response.urljoin(link.extract()) #从2020页获取所有日期URL链接
            yield scrapy.Request(url, callback=self.parse_info)
        

        
    def parse_info(self, response):
        for link in response.xpath('//div[3]/div[1]/li/a/@href'):
            url = response.urljoin(link.extract()) #从所有日期获取每页URL链接
            yield scrapy.Request(url, callback=self.parse_info_detail)

        next_page = response.xpath("//div[3]/div[2]/div/div/a[contains(text(), '下一页')]/@href")
        if next_page:
            u = response.urljoin(next_page.extract_first()) #下一页的链接
            print(u)
            yield scrapy.Request(u, callback=self.parse_info)
                  
            
    def parse_info_detail(self, response):
                yield {'name': response.xpath('//h1[@class="doctor-name"]/text()').extract_first()
            }
            
process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'})
process.crawl(MySpider)
process.start()

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Eventloop 是什么?是为了解决什么问题

    Eventloop 是什么?是为了解决什么问题

  • 关于JS中的闭包,求解答

    关于JS中的闭包,求解答

  • 有没有通过韵母查汉字的api?

    有没有通过韵母查汉字的api?

  • 假设接收方一直不从接收缓冲区读数据,

    假设接收方一直不从接收缓冲区读数据,

腾讯云代理商
海外云服务器