您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页scrapy结合xpath

scrapy结合xpath

来源:爱玩科技网

scrapy结合xpath爬取爱问知识人
python2.7.15

xpath是个很简洁方便的东西,很清晰,熟练运用xpath可以让你更快的找到想要爬取的东西。
xpath教程请移步

先来写spider

下面是进入这个页面

接下来request我们获取的网址,这里如果你直接对request传回的值使用xpath方法的话是用不了的。它和刚才的response不是一个类型,这里我们就要引入一个模块把它编码成网页类型

from lxml import etree

编码之后虽然和response不一样但可以使用xpath方法了。这个xpath选出来的就不是xpath选择器类型了,直接就是文本,比如字符串或列表,所以就没有extract方法了。

剩下的问题和回答的爬取就简单了,最下面源码见。
其他的scrapy相关设置跟上一篇酒店的差不多,不了解的移步上一篇或百度

spider源码
# coding=utf-8
import requests
import scrapy
from lxml import etree
from ..items import IaskItem

class Spider(scrapy.Spider):
    name = "iask"
    allowed_domains = ["iask.sina.com"]
    start_urls = ["https://iask.sina.com.cn/c/74.html"]

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

        def daan(self, urlq, a):
            b = urlq[a]
            answerurl = "https://iask.sina.com.cn" + b
            requ = requests.get(answerurl).text
            selector = etree.HTML(requ)
            answers = selector.xpath("//pre/text()")
            answer = ''.join(answers)
            return answer

        page = response.xpath("//div[@class='page mt30']/a/@href").extract()
        for urlp in page:
            url = "https://iask.sina.com.cn" + urlp
            con = requests.post(url).text
            selector = etree.HTML(con)
            wen = selector.xpath("//div[@class='question-title']/a/text()")
            urlq = selector.xpath("//div[@class='question-title']/a/@href")
            a = 0
            for question in wen:
                item['question'] = question.encode('utf-8')
                print question + '\n'
                answer = daan(self,urlq,a)
                a+=1
                item['answer'] = answer.encode('utf-8')
                print answer
                yield item


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务