【问题标题】:Crawling and Scraping Wiki:Picture of the day爬虫维基:今日图片
【发布时间】:2020-02-07 10:21:43
【问题描述】:

我正在尝试一个需要我爬过维基百科列表的宠物项目:按月显示每日页面的图片。例如:https://en.wikipedia.org/wiki/Wikipedia:Picture_of_the_day/May_2004 有一个图像列表,后跟每个图像的简短标题。我想在这里做以下两件事:

  1. 从页面和相应的标题中抓取所有图像。 (最好是一个字典来存储 Image: Caption 对)
  2. 遍历其他月份并重复 1。

任何有关如何实现此目的的帮助将不胜感激。

非常感谢。

【问题讨论】:

  • 到目前为止你尝试过什么? SO 不是代码编写服务,请向我们展示一些我们可以提供帮助的东西。

标签: python web-crawler screen-scraping wikipedia


【解决方案1】:

我建议你在 python 中使用scrapy,因为它比 f.e. 轻得多。硒。在函数解析中,您可以查找所有 img 标签,就像这里一样,在获取给定站点的 html 之后。在这里您可以打印所有找到的图像和文本的链接,因为我们需要的所有文本都在<p>标签中,或者如果需要将它们保存到文件中。

import scrapy
from scrapy.crawler import CrawlerProcess
import logging

class Spider(scrapy.Spider):
   def __init__(self):
      self.name = "WikiScraper"
      self.start_urls = ["https://en.wikipedia.org/wiki/Wikipedia:Picture_of_the_day/May_2004"] # Here you can add more links or generate them
   def parse(self, response):
      for src in response.css('img::attr(src)').extract():
         print("Image:", src)
      for text in response.css('p *::text'):
         print("Text:", text.extract())

if __name__ == "__main__":
   logging.getLogger('scrapy').propagate = False
   process = CrawlerProcess()
   process.crawl(Spider)
   process.start()

最后你必须加入所有应该加入的文本(我没有时间去做)并添加你需要的所有网站。 其余的我没有提到你可以在scrapy找到。

希望我没有错过任何东西!

【讨论】:

  • 感谢您的快速帮助!但似乎我在执行代码时遇到了一个小问题,因为它抛出:ReactorNotRestartable Traceback (most recent call last) in () 20 process = CrawlerProcess() 21 process。 crawl(Spider) ---> 22 process.start()
  • 我不确定如何帮助解决这个问题,您必须测试一些东西。大概以that开头
  • 嗨,是否可以将

    中的图像及其对应的文本字段作为 python dict 获取? current

    选择器选择不需要的

    字段。我想生成一个图像标题映射。谢谢!

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2014-06-23
相关资源
最近更新 更多