Scrapy——边爬边取数据并随机改变用户代理
Scrapy - access data while crawling and randomly change user agent
是否可以在scrapy爬取的同时访问数据?我有一个脚本可以找到一个特定的关键字并将关键字写入 .csv 以及找到它的 link 中。但是,我必须等待 scrapy 完成爬行,完成后它实际上会在 .csv 文件中输出数据
我也在尝试随机更改我的用户代理,但它不起作用。
如果不允许我将两个问题合二为一,我将 post 这作为一个单独的问题。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scrapy.spiders import Spider
from scrapy import log
from FinalSpider.items import Page
from FinalSpider.settings import USER_AGENT_LIST
from FinalSpider.settings import DOWNLOADER_MIDDLEWARES
import random
import telnetlib
import time
class FinalSpider(Spider):
name = "FinalSpider"
allowed_domains = ['url.com']
start_urls = ['url.com=%d' %(n)
for n in xrange(62L, 62L)]
def parse(self, response):
item = Page()
item['URL'] = response.url
item['Stake'] = ''.join(response.xpath('//div[@class="class"]//span[@class="class" or @class="class"]/text()').extract())
if item['cur'] in [u'50,00', u'100,00']:
return item
# 30% useragent change
class RandomUserAgentMiddleware(object):
def process_request(self, request, spider):
if random.choice(xrange(1,100)) <= 30:
log.msg('Changing UserAgent')
ua = random.choice(USER_AGENT_LIST)
if ua:
request.headers.setdefault('User-Agent', ua)
log.msg('>>>> UserAgent changed')
您没有义务将收集的物品(又名 "data")输出到 csv 文件中,您只能 运行 scrapy with:
scrapy crawl myspider
这会将日志输出到终端,但为了仅将项目存储到 csv 文件中,我假设您正在做这样的事情:
scrapy crawl myspider -o items.csv
现在,如果您想存储日志和项目,我建议您将其放入 settings.py
文件中:
LOG_FILE = "logfile.log"
现在您可以看到一些东西,而蜘蛛 运行 只是在检查那个文件。
关于随机用户代理的问题,请检查如何激活scrapy middlewares。
是否可以在scrapy爬取的同时访问数据?我有一个脚本可以找到一个特定的关键字并将关键字写入 .csv 以及找到它的 link 中。但是,我必须等待 scrapy 完成爬行,完成后它实际上会在 .csv 文件中输出数据
我也在尝试随机更改我的用户代理,但它不起作用。 如果不允许我将两个问题合二为一,我将 post 这作为一个单独的问题。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scrapy.spiders import Spider
from scrapy import log
from FinalSpider.items import Page
from FinalSpider.settings import USER_AGENT_LIST
from FinalSpider.settings import DOWNLOADER_MIDDLEWARES
import random
import telnetlib
import time
class FinalSpider(Spider):
name = "FinalSpider"
allowed_domains = ['url.com']
start_urls = ['url.com=%d' %(n)
for n in xrange(62L, 62L)]
def parse(self, response):
item = Page()
item['URL'] = response.url
item['Stake'] = ''.join(response.xpath('//div[@class="class"]//span[@class="class" or @class="class"]/text()').extract())
if item['cur'] in [u'50,00', u'100,00']:
return item
# 30% useragent change
class RandomUserAgentMiddleware(object):
def process_request(self, request, spider):
if random.choice(xrange(1,100)) <= 30:
log.msg('Changing UserAgent')
ua = random.choice(USER_AGENT_LIST)
if ua:
request.headers.setdefault('User-Agent', ua)
log.msg('>>>> UserAgent changed')
您没有义务将收集的物品(又名 "data")输出到 csv 文件中,您只能 运行 scrapy with:
scrapy crawl myspider
这会将日志输出到终端,但为了仅将项目存储到 csv 文件中,我假设您正在做这样的事情:
scrapy crawl myspider -o items.csv
现在,如果您想存储日志和项目,我建议您将其放入 settings.py
文件中:
LOG_FILE = "logfile.log"
现在您可以看到一些东西,而蜘蛛 运行 只是在检查那个文件。
关于随机用户代理的问题,请检查如何激活scrapy middlewares。