这可能是一个很长的路,但是人们一直对我过去发布的问题非常有帮助,因此我将尝试。如果有人可以帮助我,那就太好了...
在中文在线报纸-pages like this
上搜索关键字后,我正试图使用Scrapy获取搜索结果(链接)。当我在Chrome中检查该页面的html时,似乎存在指向文章的链接。但是,当我尝试使用Scrapy蜘蛛抓取它时,html更加基本了,我想要的链接也没有显示出来。我认为这可能是因为结果是使用JavaScript绘制到页面上的?我已经尝试将Scrapy与'scrapy-selenium'结合使用来解决此问题,但是它仍然无法正常工作。我听说Splash可能有用,但是设置起来似乎很复杂。
这是我的Scrapy蜘蛛的代码:
import scrapy
from scrapy_selenium import SeleniumRequest
class QuotesSpider(scrapy.Spider):
name = "XH"
def start_requests(self):
urls = [
'http://so.news.cn/#search/0/%E4%B8%80%E5%B8%A6%E4%B8%80%E8%B7%AF/1/'
]
for url in urls:
yield SeleniumRequest(url=url, wait_time=90, callback=self.parse)
def parse(self, response):
print(response.request.meta['driver'].title)
page = response.url.split("/")[-2]
filename = 'XH-%s.html' % page
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
如果有帮助,我也可以发布其他任何Scrapy文件。我还修改了settings.py
-在these instructions之后。
任何帮助将不胜感激。我完全被这个困扰!
答案 0 :(得分:0)
在检查工具中,打开“网络”标签并查看请求,您将发现数据来自this url,因此,请使用常规scrapy.Request()
进行抓取。
蜘蛛会是这样的:
import scrapy
import json
class QuotesSpider(scrapy.Spider):
name = "XH"
def start_requests(self):
urls = [
'http://so.news.cn/getNews?keyword=%E4%B8%80%E5%B8%A6&curPage=1&sortField=0&searchFields=1&lang=cn'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
json_data = json.loads(response.body.decode('utf-8'))
for data in json_data['content']['results']:
yield {
'url': data['url']
}