持续创作,加速成长!这是我参加「掘金日新方案 4 月更文挑战」的第9天,点击查看活动概况
前语
咱们前面更新爬虫实战的一些文章,从今日起,咱们要点解说关于parsel解析库的实战技巧,经过实战,咱们来学习其强壮的功用。
咱们先来认识一下什么是parsel库。
Parsel是一个用于解析JSON数据的Python库。它提供了一个简略易用的API,能够轻松地从JSON文件或字符串中解析数据。能够对 HTML 和 XML 进行解析,并支撑运用 XPath 和 CSS Selector 对内容进行提取和修正,同时它还交融了正则表达式提取的功用。功用灵活而又强壮。
收集数据
咱们上一篇介绍了,怎么收集大学教务体系里边的成果单,把自己的成果收集下来。今日,咱们来收集当当网里边的商品信息。之前,咱们基本上都是用正则表达式来获取数据的,今日,咱们运用parsel办法来获取数据。
发送恳求
咱们首先确认咱们的方针网址,对咱们需要获取的数据。这个是咱们爬取任何网页都要做的榜首步。
咱们要把每一个图书的数据获取下来,咱们接下来用到开发者工具。咱们看图书姓名和价格是在什么位置。是不是在网页源代码中。接下来,咱们发送恳求,获取网页源代码。
咱们能够观察到,每一个商品信息都放在<li>
标签里边。咱们只需提取<li>
标签里边的内容即可。
咱们现在开始写代码。
url="http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-1"
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
response=requests.get(url=url,headers=headers)
代码运用requests
库的get()
函数来恳求这个URL,并将成果存储在变量res
中。
获取数据
selector=parsel.Selector(response.text)
lis=selector.css('.bang_list li')
print(lis)
咱们运用css
办法挑选了一切的列表项,并运用xpath
办法挑选了一切包括.bang_list li
类的列表项。也便是咱们上面提到的<li>
标签里边的内容。
咱们看看效果怎么样。
for li in lis:
name=li.css('.name a::attr(title)').get()
conment=li.css('.star a::text').get()
price_n=li.css('.price .price_n::text').get()
price_r=li.css('.price .price_r::text').get()
price_s=li.css('.price .price_s::text').get()
css
办法用于挑选元素的 CSS 样式。在上面的示例中,咱们运用css
办法挑选了一切的列表项,并运用xpath
办法挑选了一切包括.name a::attr(title)
类的列表项。
然后,咱们运用get()
办法获取了列表项中每个元素的name
特点,以及star
类中每个元素的text
特点。
最终,咱们运用get()
办法获取了列表项中每个元素的price_n
特点,以及price_r
和price_s
特点。
保存数据
保存数据就简略了,咱们已经练习了很屡次。
f=open('./data.csv', mode='a', encoding='utf-8', newline='')
csv_writer=csv.DictWriter(f,fieldnames=[
'name',
'conment',
'price_n',
'price_r',
'price_s',
])
这段代码首先翻开一个名为data.csv
的文件,并指定运用a
形式翻开文件。然后,运用csv.DictWriter()
函数创建一个 CSV 写入器,并指定要写入的列名。在这个例子中,咱们指定了fieldnames
参数,它包括了咱们要写入的列名。
接下来,咱们运用csv_writer.writeheader()
办法写入列名。这个办法会将列名写入文件的榜首行。
最终,咱们运用csv_writer.writerow()
办法写入数据。
咱们先写入字典。
dit = {
'name':name,
'conment':conment,
'price_n':price_n,
'price_r':price_r,
'price_s':price_s,
}
csv_writer.writerow(dit)
这段代码创建了一个字典dit
,其间包括了每个元素的值。然后,它运用csv_writer.writerow()
办法将字典写入CSV文件中。
咱们能够看到,咱们已经把数据获取下来了,咱们这里发现了,其css语法和咱们之前说的一样,这个功用太强壮了。
总结
本文首要介绍了parsel库的实战技巧,包括怎么收集数据、发送恳求和获取数据等方面的内容。经过实战,咱们能够学习到parsel库的强壮功用,包括对HTML和XML的解析、XPath和CSS Selector的运用以及正则表达式提取的功用。