我试着从这个网站上获得文章。我试过:
- 进入主url
- 进入子url,完整的文章在那里
- 我从完整的文章中得到了我需要的所有细节
但是当我首先尝试运行我的代码时得到了响应403,然后我尝试通过在请求start_urls
时添加头来修复它,就像我从一些答案中读到的那样。我这样做了,但是当我进入子URL时,我的脚本给了我错误,它说响应403,我需要的所有信息都在那里。
我的当前代码如下
import scrapy
from scrapy import Request
from scrapy.crawler import CrawlerProcess
class climateupdate(scrapy.Spider):
name = 'climateupdate'
start_urls = ['http://www.bom.gov.au/climate/updates/']
def start_requests(self):
headers= {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
for url in self.start_urls:
yield Request(url, headers=headers)
def parse(self, response):
for link in response.xpath('//*[@id="content"]/ul/li[1]/a/@href'):
yield response.follow(
url=link.get(),
callback=self.parse_item
)
def parse_item(self, response):
yield {
'date': response.xpath('//*[@id="updates"]/p[1]/time/text()').extract(),
'title': response.xpath('//*[@id="updates"]/div[1]/h1/text()').get(),
'text':''.join([x.get().strip() for x in response.xpath('//*[@class="key-points box-notice bg-grey"]//p//text()')])
}
if __name__ == '__main__':
process = CrawlerProcess()
process.crawl(weeklymining)
process.start()
我应该如何写我的脚本,以便进入子网址,并获得有关文章的所有细节。
先谢谢你了。
1条答案
按热度按时间xfb7svmp1#
1.在这里使用标头是不正确的,这就是为什么您会得到
403
1.使用自定义设置插入用户代理
1.你的
date and text
选择xpath表达式不正确//*[@id="content"]/ul/li[1]/a/@href
只选择一个详细信息url完整的工作代码: