V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Colorful
V2EX  ›  Python

关于 scrapy 爬虫问题

  •  
  •   Colorful · 2020-03-08 11:16:14 +08:00 · 2665 次点击
    这是一个创建于 1755 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 spiders 文件夹里面的一个文件

    def parse(self, response): # mtitem = MafengwoItem() datas = json.loads(response.body)#将 Json 格式数据处理为字典类型 datas = datas['html']

    datas 这块打印出来的信息是 html 的 就像这样的

    标题标题

    大概这样的 20 条信息,不是数组

    不知道怎么样获取 A 标签里面的数据,有用 for

    for data_item in titleall: mtitem['title'] = data_item.xpath("//a/@href").extract() #标题

    但这样获取到的值是空值,所以想请教一下
    
    小白一枚
    
    10 条回复    2020-03-08 13:55:01 +08:00
    Colorful
        1
    Colorful  
    OP
       2020-03-08 11:21:37 +08:00
    datas 这块打印出来的信息是 html 的 就像这样的

    <a class="item clearfix" href="*****" target="_blank">标题标题</a>

    就像这样的,大概 20 条吧
    我只是简写了而已,里面有一些标签什么的
    但获取到的数据不是数组,就是全部是 html
    zhzy
        2
    zhzy  
       2020-03-08 11:54:00 +08:00 via iPhone
    就不能用 html 解析器吗……BeautifulSoup 之类的
    Colorful
        3
    Colorful  
    OP
       2020-03-08 12:07:39 +08:00
    @zhzy 没用过了,我去网上找找
    nicevar
        4
    nicevar  
       2020-03-08 12:17:12 +08:00
    描述的不是很清楚,response.body 是 json 数据?没必要用什么 BeautifulSoup,你要获取标题应该用 text 才是,不是 @href,这个是获取 url 的
    Colorful
        5
    Colorful  
    OP
       2020-03-08 12:31:45 +08:00
    @nicevar json.loads(response.body) 出来的数据是 HTML,大概是这样的


    <a class="item clearfix" href="*****" target="_blank">标题标题</a>
    scdylk
        6
    scdylk  
       2020-03-08 12:35:56 +08:00 via iPhone
    去标签内的文字 xpath 后面要加 text ()好 或者 string ()
    nicevar
        7
    nicevar  
       2020-03-08 12:36:12 +08:00
    @Colorful 你用 json.loads 干啥, response 直接就能进行 xpath 操作了, 按你的要求筛选出 a 标签列表,直接挨个读取 a 标签的 text 就能拿到 title 了
    scdylk
        8
    scdylk  
       2020-03-08 12:37:48 +08:00 via iPhone
    没打完…取属性的话 不用加 extract () 好像是这样 有段时间没用了
    tozp
        9
    tozp  
       2020-03-08 13:04:52 +08:00
    xpath 是旧版的应用,现在都用新版了
    data_item.css('a::text').extract()就是获取 a 里面的所有数据,.extract_first()就是只获取第一个数据。
    Colorful
        10
    Colorful  
    OP
       2020-03-08 13:55:01 +08:00
    @tozp 懂了,太感谢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3204 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:49 · PVG 18:49 · LAX 02:49 · JFK 05:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.