一、使用python下载网页代码
from requests_html import HTMLSessionsession = HTMLSession()r = session.get('https://movie.douban.com/subject/1292052/')print(r.text)
二、提取网页中所需的内容
2.1使用使用CSS 选择器 来提取网页中有价值的信息--例:爬取单个豆瓣网页
先查看一段内容的代码,在代码上点击右键,选择 Copy -> Copy Selector (或者 Copy CSS Selector、复制 CSS 选择器),就能将这段内容对应的 CSS 选择器复制到剪贴板。
from requests_html import HTMLSessionsession=HTMLSession()r=session.get('https://movie.douban.com/subject/1292052/')title=r.html.find('#content > h1 > span:nth-child(1)',first=True)# r.html.find() 接受一个 CSS 选择器(字符串形式)作为参数# 返回在网页中使用该选择器选中的内容。print(title.text)
2.2 例:爬取多个豆瓣网页
1 ''' 2 爬取多个豆瓣网页 3 ''' 4 from requests_html import HTMLSession 5 6 links=['https://movie.douban.com/subject/1292052/', 7 'https://movie.douban.com/subject/1962665/', 8 'https://movie.douban.com/subject/26752088/' 9 ]10 11 session=HTMLSession()12 for link in links:13 r=session.get(link)14 #r.html.render()15 16 title=r.html.find('#content > h1 > span:nth-child(1)',first=True)17 year=r.html.find('#content > h1 > span.year',first=True)18 print(title.text,year.text)
2.3 例:爬取新浪财经股票的实时价格 多个
'''例:爬取新浪财经股票的实时价格 多个'''from requests_html import HTMLSessionlinks=['http://stock.finance.sina.com.cn/usstock/quotes/aapl.html', 'http://stock.finance.sina.com.cn/usstock/quotes/bidu.html', 'http://stock.finance.sina.com.cn/usstock/quotes/msft.html' ]session=HTMLSession()for link in links: r=session.get(link) r.html.render() title=r.html.find('#hqPrice',first=True) print(title.text)
三、存储格式化数据
CSV格式
Python 提供了标准库 csv 来读写 csv 数据。
import csvfile=open('movies.csv','w',newline='')csvwriter=csv.writer(file)csvwriter.writerow(['名称','年份'])csvwriter.writerow(['A','1992'])csvwriter.writerow(['B','1998'])csvwriter.writerow(['C','2010'])file.close()
CSV格式:通常用来存储简单的数据,表格类型数据首选。并且可以使用Excel打开。
名称,年份A,1992B,1998C,2010
JSON格式:通常用来存储键值数据,一般情况下选择
[{ "名称":"A","年份":"1992"},{ "名称":"B","年份":"1998"},{ "名称":"C","年份":"2010"}]
XML格式:存储非常复杂的数据格式,大多数情况下用不到。
<0> <名称> A <年份> 1992 <1> <名称> B <年份> 1998 <2> <名称> C <年份> 2010 年份> 名称> 年份> 名称> 年份> 名称>
将爬虫数据写入CSV文件
from requests_html import HTMLSessionimport csvsession=HTMLSession()file=open('movies.csv','w',newline='')csvwriter=csv.writer(file)csvwriter.writerow(['名称','年份'])links=['https://movie.douban.com/subject/1292052/', 'https://movie.douban.com/subject/26752088/', 'https://movie.douban.com/subject/1962665/']for link in links: r=session.get(link) title=r.html.find('#content > h1 > span:nth-child(1)',first=True) year=r.html.find('#content > h1 > span.year',first=True) csvwriter.writerow([title.text,year.text])file.close()
四、例子
简单地爬取百度新闻,并写入csv文件
from requests_html import HTMLSessionimport csvsession=HTMLSession()file=open('news_baidu.csv','w',newline='')csvwriter=csv.writer(file)csvwriter.writerow(['序号','新闻标题'])n=1ans_new_titles=[]r=session.get('https://news.baidu.com/')#r.html.render()title_1=r.html.find('#pane-news > div > ul > li.hdline0 > strong > a',first=True)csvwriter.writerow([n,title_1.text])n=n+1titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')ans_new_titles+=titles_baidufor title in ans_new_titles: csvwriter.writerow([n,title.text]) n+=1file.close()
位置:爬虫\\create_file1
爬取学习强国,失败,代码如下:
from requests_html import HTMLSessionimport csvsession=HTMLSession()file=open('news_xxqg.csv','w',newline='')csvwriter=csv.writer(file)csvwriter.writerow(['序号','新闻标题'])n=1ans_new_titles=[]r=session.get('https://www.xuexi.cn/')r.html.render()titles_xxqg=r.html.find('#Ckhjp4r149s000',first=True)ans_new_titles+=titles_xxqgfor title in ans_new_titles: csvwriter.writerow([n,title.text]) n+=1file.close()
五、简单搜索引擎
对存入的文件进行读取
import csvpage_url=[]page_title=[]file=open('全站爬虫爬取百度ai.csv','r')infos=csv.reader(file)for info in infos: page_title.append(info[0]) page_url.append(info[1])while True: keyword=input('请输入查询关键字,输入quit结束') if keyword=='quit': break for i in range(len(page_title)): if str(page_title[i]).find(keyword)>=0: print(page_url[i],page_title[i])file.close()