gpt4 book ai didi

python - Scrapy Spider 验证和迭代

转载 作者:行者123 更新时间:2023-11-30 23:31:32 27 4
gpt4 key购买 nike

下面是我组装的一个 Scrapy 蜘蛛,用于从网页中提取一些元素。我从another Stack Overflow solution借用了这个解决方案。它有效,但我需要更多。我需要能够在身份验证后遍历 start_requests 方法内的 for 循环中指定的一系列页面。

是的,我确实找到了Scrapy documentation discussing this以及之前的解决方案 something very similar 。两者似乎都没有多大意义。据我所知,我需要以某种方式创建一个请求对象并继续传递它,但似乎无法弄清楚如何做到这一点。

预先感谢您的帮助。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
import re

class MyBasicSpider(BaseSpider):
name = "awBasic"
allowed_domains = ["americanwhitewater.org"]

def start_requests(self):
'''
Override BaseSpider.start_requests to crawl all reaches in series
'''
# for every integer from one to 5000
for i in xrange(1, 50): # 1 to 50 for testing

# convert to string
iStr = str(i)

# add leading zeros to get to four digit length
while len(iStr) < 4:
iStr = '0{0}'.format(iStr)

# call make requests
yield self.make_requests_from_url('https://mycrawlsite.com/{0}/'.format(iStr))

def parse(self, response):

# create xpath selector object instance with response
hxs = HtmlXPathSelector(response)

# get part of url string
url = response.url
id = re.findall('/(\d{4})/', url)[0]

# selector 01
attribute01 = hxs.select('//div[@id="block_1"]/text()').re('([^,]*)')[0]

# selector for river section
attribute02 = hxs.select('//div[@id="block_1"]/div[1]/text()').extract()[0]

# print results
print('\tID: {0}\n\tAttr01: {1}\n\tAttr02: {2}').format(reachId, river, reachName)

最佳答案

您可能必须从不同的角度解决问题:

  • 首先,抓取主页;它包含一个登录表单,因此您可以使用 FormRequest模拟用户登录;您的 parse 方法可能如下所示:

    def parse(self, response):
    return [FormRequest.from_response(response,
    formdata={'username': 'john', 'password': 'secret'},
    callback=self.after_login)]
  • after_login 中,您通常通过扫描响应中的错误消息来检查身份验证是否成功;如果一切顺利并且您已登录,您可以开始为您所在的页面生成请求:

    def after_login(self, response):
    if "Login failed" in response.body:
    self.log("Login failed", level=log.ERROR)
    else:
    for i in xrange(1, 50): # 1 to 50 for testing
    # convert to string
    iStr = str(i)

    # add leading zeros to get to four digit length
    while len(iStr) < 4:
    iStr = '0{0}'.format(iStr)

    # call make requests
    yield Request(url='https://mycrawlsite.com/{0}/'.format(iStr),
    callback=self.scrape_page)
  • scrape_page 将在您为其创建请求的每个页面上调用;在那里,您终于可以使用 XPath、正则表达式等提取所需的信息。

顺便说一句,你不应该手动用 0 填充数字;如果您使用正确的格式说明符,format 将为您完成此操作。

关于python - Scrapy Spider 验证和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com