【Python】爬虫-----数据解析之CSS解析

如何使用CSS解析数据?

1.导入所需模块

import parsel

2.把要解析的数据转化为Selector对象

selector = parsel.Selector(要解析的内容)

3.调用css函数输入解析规则

定位class里的h1,并拿到它里面的内容:

selector.css('.bookname h1::text').get()

定位id,并拿到它里面的内容:

selector.css('#content::text').getall() #getall()返回的是一个列表


用CSS解析网页文本案例

import requests
import parsel

url = "https://www.biquge.biz/58_58780/161880.html"
respond = requests.get(url).text
#print(respond)
selector = parsel.Selector(respond)
novle = selector.css('.bookname h1::text').get()
content = selector.css('#content::text').getall()
content = '\n'.join(content)
print(novle)
print(content.encode('gbk','ignore').decode('gbk','ignore'))

这段代码只能输出最后一个网站的内容是因为在循环结束后,变量 `detail_html` 的值仍然是最后一个网站的内容,而在循环内部对该变量的赋值并没有被使用。 要修复这个问题,你可以将循环内部的代码封装成一个函数,然后在循环内部调用该函数,将每个网站的内容都进行解析和打印输出。具体代码实现如下: ```python selector = parsel.Selector(html_data) lis = selector.css('.list_item h2 a::attr(href)').getall() details = [] for li in lis: detail_url = 'https://travel.qunar.com' + li details.append(detail_url) # 定义解析详情页的函数 def parse_detail(detail_url): detail_html = requests.get(detail_url).text detail_selector = parsel.Selector(detail_html) title = detail_selector.css('.b_crumb_cont *:nth-child(3)::text').get() comment = detail_selector.css('.title.white::text').get() view_count = detail_selector.css('.view_count::text').get() date = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.when > p > span.data::text').get() days = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text').get() money = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.howmuch > p > span.data::text').get() character = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.who > p > span.data::text').get() play_list = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.how > p > span.data > span::text').getall() for play in play_list: print(play) print(title, comment, view_count, date, days, money, character, play_list, detail_url) time.sleep(random.randint(3, 5)) # 循环遍历每个网站的链接,并调用函数解析和输出详情页内容 for detail_url in details: parse_detail(detail_url) ``` 这样就可以输出每个网站的内容了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SamRol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值