我试着从这个网站上刮文章。到目前为止,我所做的计划是:
- start_urls可以覆盖网站中的所有页面
- parse函数用于捕获详细信息页面,其中包含我需要的所有信息
- parse_item用于获取我需要的信息(日期、标题和全文)
- 我使用response.xpath来获取信息。
import scrapy
from scrapy.crawler import CrawlerProcess
class weeklymining(scrapy.Spider):
name = 'weeklymining'
start_urls = ['https://www.miningweekly.com/page/coal/page:'+str(x) for x in range(1,4)]
def parse(self, response):
for link in response.xpath('//*[@class="en-serif"]/a/@href'):
yield scrapy.Request(
url=link.get(),
callback=self.parse_item
)
def parse_item(self, response):
yield {
'date': response.xpath('//*[@class="sml"]/p/span[1]').get(),
'category': 'coal',
'title': response.xpath('//*[@class="article_title"]/h2/a/text()').get(),
'text':''.join([x.get().strip() for x in response.xpath('//*[@id="article_content_container"]//p//text()')])
}
if __name__ == '__main__':
process = CrawlerProcess()
process.crawl(weeklymining)
process.start()
当我运行代码时,它给我错误:2022-07-14 23:14:28 [scrapy.core.scraper] ERROR: Spider error processing <GET https://www.miningweekly.com/page/coal/page:1> (referer: None)
我可以打开网址,但似乎代码不能处理网址。
我应该如何修复我的代码,以便从网站获得所需的信息?
非常感谢你的帮助
1条答案
按热度按时间6mzjoqzu1#
出现错误是因为此行
url=link.get()
生成了一个无法搜索的相对URL。您可以将其与基本URL连接以形成完整的URL,也可以使用response.follow
快捷方式,如下所示: