- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我写了一个蜘蛛从 http://ip.42.pl/raw 获取我的 IP通过 PROXY.
这是我的第一个蜘蛛。我想更改 user_agent。我从本教程中获得信息 http://blog.privatenode.in/torifying-scrapy-project-on-ubuntu
我完成了本教程中的所有步骤,这是我的代码。
BOT_NAME = 'CheckIP'
SPIDER_MODULES = ['CheckIP.spiders']
NEWSPIDER_MODULE = 'CheckIP.spiders'
USER_AGENT_LIST = ['Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3',
'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
'Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
'Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9',
'Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
]
HTTP_PROXY = 'http://127.0.0.1:8123'
DOWNLOADER_MIDDLEWARES = {
'CheckIP.middlewares.RandomUserAgentMiddleware': 400,
'CheckIP.middlewares.ProxyMiddleware': 410,
'CheckIP.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
}
import random
from scrapy.conf import settings
from scrapy import log
class RandomUserAgentMiddleware(object):
def process_request(self, request, spider):
ua = random.choice(settings.get('USER_AGENT_LIST'))
if ua:
request.headers.setdefault('User-Agent', ua)
#this is just to check which user agent is being used for request
spider.log(
u'User-Agent: {} {}'.format(request.headers.get('User-Agent'), request),
level=log.DEBUG
)
class ProxyMiddleware(object):
def process_request(self, request, spider):
request.meta['proxy'] = settings.get('HTTP_PROXY')
import time
from scrapy.spider import Spider
from scrapy.http import Request
class CheckIpSpider(Spider):
name = 'checkip'
allowed_domains = ["ip.42.pl"]
url = "http://ip.42.pl/raw"
def start_requests(self):
yield Request(self.url, callback=self.parse)
def parse(self, response):
now = time.strftime("%c")
ip = now+"-"+response.body+"\n"
with open('ips.txt', 'a') as f:
f.write(ip)
这是 USER_AGENT 的返回信息
2015-10-30 22:24:20+0200 [scrapy] DEBUG: Web service listening on 127.0.0.1:6080
2015-10-30 22:24:20+0200 [checkip] DEBUG: User-Agent: Scrapy/0.24.4 (+http://scrapy.org) <GET http://ip.42.pl/raw>
用户代理:Scrapy/0.24.4 (+ http://scrapy.org )
当我在请求中手动添加 header 时,一切正常。
def start_requests(self):
yield Request(self.url, callback=self.parse, headers={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"})
这是控制台返回的结果
2015-10-30 22:50:32+0200 [checkip] DEBUG: User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3 <GET http://ip.42.pl/raw>
如何在我的爬虫中使用 USER_AGENT_LIST?
最佳答案
如果您不需要随机的 user_agent,您可以将 USER_AGENT
放在您的设置文件中,例如:
settings.py:
...
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0'
...
不需要中间件。但是如果你真的想随机选择一个 user_agent,首先要确保 RandomUserAgentMiddleware
正在被使用,你应该在你的日志中检查这样的东西:
Enabled downloader middlewares:
[
...
'CheckIP.middlewares.RandomUserAgentMiddleware',
...
]
检查 CheckIP.middlewares
是否是该中间件的路径。
现在可能设置被错误地加载到中间件上,我建议使用 from_crawler
方法来加载它:
Class RandomUserAgentMiddleware(object):
def __init__(self, settings):
self.settings = settings
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
o = cls(settings, crawler.stats)
return o
现在使用 self.settings.get('USER_AGENT_LIST')
在 process_request
方法中获取您想要的内容。
同时请更新你的 scrapy 版本,看起来你正在使用 0.24
而它已经通过了 1.0
。
关于python - 如何更改 scrapy spider 中的 User_AGENT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444793/
现在我有2个蜘蛛,我想做的是 Spider 1 转到 url1 如果 url2 出现,用 url2, ) 它加载设置但不抓取: 2015-08-24 14:13:32 [scrapy] INFO: E
我看到在他们使用的类末尾的一些蜘蛛文件中 class TestSpider(BaseSpider): pass SPIDER = TestSpider() 为什么我们要使用 SPIDER = T
我该如何解决这个错误? mona@pascal:~/computer_vision/instagram/instagram$ scrapy crawl instagramspider 2017-03-
很抱歉重新发布,我之前帖子的标题令人困惑。在蜘蛛示例(下面的代码)中,如何使用“pyinstaller”(或其他一些安装程序)来构建可执行文件(例如myspidy.exe),以便最终用户不需要在Win
我是python和scrapy的新手。我用了这个博客里的方法Running multiple scrapy spiders programmatically在 flask 应用程序中运行我的蜘蛛程序。
我们的 Meteor 版本是 0.8.1,这意味着当我们尝试安装当前版本的 Spiderable 时它会崩溃。PhantomJS 与这种不兼容有关,因为它有一些过时的依赖项,主要是关于 BlazeLa
我需要什么: 启动爬虫 爬虫工作完成 等一分钟 再次启动爬虫 我试试这个: from scrapy.crawler import CrawlerProcess from scrapy.utils.pr
我是一名学生,我正在为一个项目收集有关品牌的信息。我找到了这个名为 Kit 的网站:Kit Page我想搜索品牌。它有将近 500 页,我用 Python 3 编写了一个 Scrapy Spider,
我更新到 Spyder 4(4.0.0?)以获得最新、最强大的功能。这时我发现Spyder现在可以选择使用Kite进行自动补全。在尝试了 Kite 一段时间后,我想恢复到以前的自动完成设置。我认为通过
下面是我组装的一个 Scrapy 蜘蛛,用于从网页中提取一些元素。我从another Stack Overflow solution借用了这个解决方案。它有效,但我需要更多。我需要能够在身份验证后遍历
情况: 我想在我的 vps ubuntu 服务器上运行一些应用程序以进行爬网测试。我的应用使用来自“atmosphere”的 meteor-router 和 mrt 包管理器。在我使用 phantom
我正在尝试在此 SO 线程中使用“warwaruk”描述的链接解析结构: Following links, Scrapy web crawler framework 这在仅从每个页面抓取单个项目时效果
我正在编写一个 scrapy 蜘蛛从主页上抓取今天纽约时报的文章,但由于某种原因它不跟踪任何链接。当我在 scrapy shell http://www.nytimes.com 中实例化链接提取器时,
我已经看过类似的问题并尝试了给出的答案但无济于事。有人可以帮我纠正这个吗? 谢谢 hepz@ubuntu:~/Documents/project/project$ scrapy crawl NewsS
大家好,我正在尝试从代码中的给定链接获取完整结果。但我的代码没有给出所有结果。这个链接说它包含 2132 个结果,但它只返回 20 个结果。: from scrapy.spider import Sp
scrapyd 文档包括以下注释: scrapyd-deploy won’t deploy anything outside the project module... 这是否意味着我不能从我的蜘蛛中
我是 python 编程和 scrapy 的新手。我在网络爬行时遇到错误。我在这个网站上使用过类似的帮助页面,甚至从头到尾遵循了一个教程,但没有成功,任何帮助将不胜感激。 错误说:蜘蛛错误处理http
因此,当我尝试从 epinions.com 抓取产品评论信息时,如果主要评论文本太长,它会有一个指向另一个页面的“阅读更多”链接。我从“http://www.epinions.com/reviews/
我已阅读Scrapy: Follow link to get additional Item data?并遵循它,但它不起作用,可能这是一个简单的错误,所以我把我的蜘蛛的源代码。 import scr
我定义了一个scrapy Spider,它可以抓取所有名字和一些故事,而定义的xpath无法捕获故事,来自https://www.cancercarenorthwest.com/survivor-st
我是一名优秀的程序员,十分优秀!