python - 没有标签的 Scrapy 提取 URL (href) 元素

标签 python scrapy

我已经成功地使用以下程序提取了一些数据。但是,当我检查提取数据结果时,我意识到如果内容中有 url,我无法获取包含在 'question_content' 中的 href 元素(url)。

import scrapy

class JPItem(scrapy.Item):
    best_answer = scrapy.Field()
    question_content = scrapy.Field()
    question_title = scrapy.Field()

class JPSpider(scrapy.Spider):

    name = "jp"
    allowed_domains = ['detail.chiebukuro.yahoo.co.jp']

    start_urls = [
        'https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q' + str(x)
        for x in range (12174460000,12174470000)
    ]

    def parse(self, response):
        item = JPItem()

        item['question_title'] = response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ttl h1::text").extract_first()
        item['question_content'] = ''.join([i for i in response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes p::text").extract()])
        item['best_answer'] = ''.join([i for i in response.css("div.mdPstd.mdPstdBA.othrAns.clrfx div.ptsQes p.queTxt::text").extract()])

        yield item

编辑 1 Question_content that would like to grab

从图中可以看出,有一个 url 我无法以“::text”格式捕获它,但如果省略“::text”,将获得其他不相关的数据和标签,即br, p.

我怎样才能在不包含 br 和 p 标签的情况下也获取该链接?

最佳答案

试试这个新代码:

import scrapy
import re

class JPItem(scrapy.Item):
    best_answer = scrapy.Field()
    question_content = scrapy.Field()
    question_title = scrapy.Field()
    question_link = scrapy.Field()

class JPSpider(scrapy.Spider):

    name = "jp"
    allowed_domains = ['detail.chiebukuro.yahoo.co.jp']

    start_urls = [
        'https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12174467757?__ysp=VVNC',
    ]

    def parse(self, response):
        item = JPItem()

        item['question_title'] = response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ttl h1::text").extract_first()
        item['question_content'] = re.sub('[\s+]', '', ''.join([i for i in response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes p::text").extract()]))
        item['question_link'] = ''.join(response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes p:not([class]) a::text").extract())
        item['best_answer'] = re.sub('[\s+]', '', ''.join([i for i in response.css("div.mdPstd.mdPstdBA.othrAns.clrfx div.ptsQes p.queTxt::text").extract()]))

        yield item

输出可以给你:

'question_content':'USBについての質問です下記のサイトの通りCentOS7を1USBからインストールしようと思うのですが、USBに焼くとそのUSBは今まで通りに使えなくなってしまうのでしょうか...?(データを出し入れしたり)教えてください~!'

'question_link': u'https://www.skyarch.net/blog/?p=6382'

关于python - 没有标签的 Scrapy 提取 URL (href) 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44160095/

相关文章:

python - 为什么我收到 MySQL 语法错误?

python - Scrapy setup ubuntu 16.04 或任何其他

python - Scrapy:将数据存储在一个项目字段的嵌套标签中

python - 以 Curl 格式导出 Scrapy 请求

Python 初学者 : outputting function-generated text to file

python - Pandas 数据框中一个月的第一个和最后一个可用数据点

python - 如何将文件从Azure blob复制到Linux中的某些路径

python - 将两张图像混合成全景图

python - Scrapy 广泛抓取 - 在广泛抓取期间仅允许内部链接,allowed_domains 的域太多

python - 在 Python 脚本中使用 Scrapy Spider 输出的问题