python - Scrapy LinkExtractor 找不到现有的 url
问题描述
我有一个像这样的爬虫:
class SkySpider(CrawlSpider):
name = "spider_v1"
allowed_domains = [
"atsu.edu",
]
start_urls = [
"http://www.atsu.edu",
]
rules = (
Rule(
INFO_LINKS_EXTRACTOR,
follow=True,
callback='parse_item',
),
)
def parse_item(self, response):
print("ENTERED!")
item = SportsScraperItem()
item["contact"] = self._parse_contact(response)
return item
在我的helpers.py 中,我有:
from scrapy.linkextractors import LinkExtractor
def _r(string):
return f"(.*?)(\b{string}\b)(.*)"
INFO_LINKS_EXTRACTOR = LinkExtractor(
allow=(
_r('about'),
),
unique=True,
)
我知道atsu.edu有一个链接https://www.atsu.edu/about-atsu/,但我的提取器似乎没有看到它并且parse_item()
方法没有运行。我在这里做错了什么?
编辑 1:
日志:
2019-10-01 15:40:58 [scrapy.core.engine] INFO: Spider opened
2019-10-01 15:40:58 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2019-10-01 15:40:58 [steppersspider_v1] INFO: Spider opened: steppersspider_v1
2019-10-01 15:40:58 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2019-10-01 15:40:59 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.atsu.edu/robots.txt> from <GET http://WWW.ATSU.EDU/robots.txt>
2019-10-01 15:41:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.atsu.edu/robots.txt> (referer: None)
2019-10-01 15:41:11 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.atsu.edu/> from <GET http://WWW.ATSU.EDU>
2019-10-01 15:41:15 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.atsu.edu/robots.txt> (referer: None)
2019-10-01 15:41:19 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.atsu.edu/> (referer: None)
2019-10-01 15:41:19 [steppersspider_v1] DEBUG: Saved file steppers-www.atsu.edu.html
2019-10-01 15:41:20 [scrapy.core.engine] INFO: Closing spider (finished)
2019-10-01 15:41:20 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
编辑 2
这是我在 regexp101.com 上测试这个正则表达式的方法。
编辑 3
正则表达式的工作函数:
def _r(string):
return r"^(.*?)(\b{string}\b)(.*)$".format(string=string)
解决方案
默认情况下,链接提取器只搜索a
和area
标签。您正在寻找的链接似乎在li
标签中。
您需要tags
使用所需的标签将参数传递给链接提取器的构造函数。例如:
tags=('a', 'area', 'li')
请参阅https://doc.scrapy.org/en/latest/topics/link-extractors.html#module-scrapy.linkextractors.lxmlhtml
推荐阅读
- python - 从简单的 python 列表创建图像和标签的 tensorflow 数据集
- java - 用于aidl的Android自定义类依赖
- rabbitmq - RabbitMQ-队列中未确认的消息计数随着侦听器的启动和未确认的消息由侦听器处理而增加
- firebase - 使 FIrebasePushNotficaition 插件示例工作
- php - jquery按钮未执行
- react-native - 获取 WiFi 列表 React Native
- flutter - Flutter Draggable - 如何将 Draggable 重置为起始位置?
- java - 你好我对这段代码有一点问题
- java - 在 Business Central 中创建记分卡时不起作用?
- javascript - 简单且有问题的双表单 ajax 发布不会触发