我的代码是
import scrapy
from scrapy import log
from scrapy.exceptions import IgnoreRequest
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://www.*****']
custom_settings = {
'DOWNLOAD_DELAY': '5',
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
'scrapy_proxies.RandomProxy': 100,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}
PROXY_LIST = '/path/to/proxy/list.txt'
def parse(self, response):
bannCheck = response.css('.lead ::text').extract_first();
for title in response.css('.seo-directory-doctor-link'):
yield {'title': title.css('a ::attr(href)').extract_first()}
next_page = response.css('li.seo-directory-page > a[rel=next] ::attr(href)').extract_first()
if next_page:
yield scrapy.Request(response.urljoin(next_page), callback=self.parse)
这是我尝试将Proxy
和CustomSettings
与5的下载延迟一起使用的方式,但它不起作用。
我不知道Settings.py
的位置以及如何配置它?
也许有人可以给我一个这个代码的例子?
希望得到您的支持
由于
编辑:现在我知道我必须在保存项目的文件夹中创建settings.py.
我尝试了示例https://github.com/aivarsk/scrapy-proxies 但它不起作用他不使用代理列表。
怎么了?
答案 0 :(得分:1)
我很好地与代理一起工作,以这种方式实现它。 我使用了这个scrapy-proxies,这是我的代码组织:
将randomproxy.py
放在settings.py
旁边。
在 settings.py
文件的内部放置了这个:
# Retry many times since proxies often fail
RETRY_TIMES = 5
# Retry on most error codes since proxies fail for different reasons
RETRY_HTTP_CODES = [500, 503, 504, 400, 403, 404, 408]
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
# Fix path to this module
'botcrawler.randomproxy.RandomProxy': 600,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}
PROXY_LIST = '/home/user/botcrawler/botcrawler/proxy/list.txt'
然后在您的蜘蛛代码中(在解析函数中),通过检查页面上的内容来检查代理是否正常工作:
if not response.xpath('//title'):
yield Request(url=response.url, dont_filter=True)
希望有所帮助。问候。