|
|
发表于 2019-11-7 09:13:34
|
显示全部楼层
本帖最后由 天圆突破 于 2019-11-7 09:19 编辑
- import re
- from requests_html import HTMLSession
- session = HTMLSession()
- url = 'https://www.biqugex.com/book_79086/'
- req = session.get(url=url)
- req = req.html
- # 拿到了所有的dt和dd
- dl = req.find('.listmain>dl>dt,.listmain>dl>dd')
- dl_html = [i.html for i in dl]
- # 下面可以循环找要定位的dt,例如设定的条件是"内容里面有正文卷三个字"
- dt = list(filter(lambda x: re.search('正文卷', x.text), req.find('.listmain>dl>dt')))
- # 拿到上面的dl里,找到索引,然后切片
- if dt:
- dt_html = dt[0].html
- # 找索引要用.Html来找
- indx = dl_html.index(dt_html)
- # 为了防止里面还有dt,再筛一遍
- dl = list(filter(lambda x: x.tag=='dd', dl[indx+1:]))
- # 找出里面的a标签
- taga = [d.find('a', first=True) for d in dl]
- # 整理结果,用反射是为了容错,避免因为意外情况受到影响报错
- result = [
- {
- 'title': getattr(a, 'text').strip(),
- 'href': getattr(a, 'attrs', {}).get('href', '')
- } for a in taga
- ]
- print(result)
复制代码
没有用bs,轻量级的爬虫用request_html就够了
另外,request_html是rquest作者最新出的爬虫库,自带解析,个人觉得bs虽然挺重,但是有时候反而不如这个方便... |
|