【问题标题】:scrapy regex returning nonmatching urls as wellscrapy 正则表达式也返回不匹配的 url
【发布时间】:2015-12-21 12:54:09
【问题描述】:

我的蜘蛛代码是:

class TryItem(Item):
    url = Field()

class BbcSpiderSpider(CrawlSpider):
    name = "bbc_spider"
    allowed_domains = ["www.bbc.com"]
    start_urls = ['http://www.bbc.com/sport/0/tennis']

    rules = (Rule(LinkExtractor(allow=['.*sport\/0\/tennis\/\d{8}']), callback='parse_item', follow=True),)

    def parse_item(self, response):
        Item = TryItem()
        Item['url'] = response.url
        yield Item

通过这个蜘蛛,我试图收集所有关于网球的文章的网址。我使用 csv 代码:

scrapy crawl bbc_spier -o bbc.csv -t csv

我正在寻找的输出是:

http://www.bbc.com/sport/0/tennis/34322294
http://www.bbc.com/sport/0/tennis/14322295
...
http://www.bbc.com/sport/0/tennis/12345678

但是,蜘蛛也会返回不匹配的 url,例如:

http://www.bbc.com/sport/0/tennis/29604652?print=true
http://www.bbc.com/sport/0/tennis/34252190?comments_page=11&filter=none&initial_page_size=10&sortBy=Created&sortOrder=Descending

有什么建议吗?谢谢

【问题讨论】:

  • 删除?之后的所有字符串对吧?
  • 是的。文章的网址应以 8 位数字结尾。例如,bbc.com/sport/0/tennis/29604652
  • 好的,让我检查你的代码。
  • 不知道为什么你的代码不起作用,follow=True 是做什么的?
  • 蜘蛛使用“follow”规则爬取网站,搜索网球相关文章。

标签: python regex web-scraping scrapy


【解决方案1】:

不要让蜘蛛通过强制网址在 8 位后结束来跟踪不需要的网址:

.*sport\/0\/tennis\/\d{8}$
#              IMPORTANT ^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多