用Scrapy和Selenium搜索结果

2024-09-28 21:42:13 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一个长期的机会,但人们总是非常有帮助的问题,我已经张贴在过去,所以我要尝试。如果有人能帮我,那就太好了。。。你知道吗

我正在尝试使用Scrapy来获得搜索结果(链接),在中国在线报纸上搜索关键字后-pages like this

当我在Chrome中检查页面的html时,文章的链接似乎就在那里。但是当我尝试用一个Scrapy spider抓取它时,html更加基本,我想要的链接不会出现。我认为这可能是因为结果是使用JavaScript绘制到页面的?我试着将“Scrapy”和“Scrapy selenium”结合起来来解决这个问题,但仍然不起作用。我听说Splash可能有用,但设置起来似乎很复杂。你知道吗

这是我的粘蜘蛛的代码:

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)

如果有帮助的话,我也可以发布任何其他的垃圾文件。我还修改了settings.py后面的these instructions。你知道吗

任何帮助都将不胜感激。我完全被这个困住了!你知道吗


Tags: importselfurl链接responsedefhtmlselenium
1条回答
网友
1楼 · 发布于 2024-09-28 21:42:13

在inspect tool open network tab and watch requests中,您将发现数据来自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']
            }

相关问题 更多 >