简单的爬虫
一、使用python下载网页代码
from requests_html import HTMLSession session = 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 HTMLSession session=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 HTMLSession links=['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 csv file=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,1992 B,1998 C,2010
JSON格式:通常用来存储键值数据,一般情况下选择
[{"名称":"A","年份":"1992"},{"名称":"B","年份":"1998"},{"名称":"C","年份":"2010"}]
XML格式:存储非常复杂的数据格式,大多数情况下用不到。
<0><名称>A<!--名称--><年份>1992<!--年份--><!--0--><1><名称>B<!--名称--><年份>1998<!--年份--><!--1--><2><名称>C<!--名称--><年份>2010<!--年份--><!--2-->
将爬虫数据写入CSV文件
from requests_html import HTMLSession import csv session=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 HTMLSession import csv session=HTMLSession() file=open('news_baidu.csv','w',newline='') csvwriter=csv.writer(file) csvwriter.writerow(['序号','新闻标题']) n=1 ans_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+1 titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a') ans_new_titles+=titles_baidu for title in ans_new_titles: csvwriter.writerow([n,title.text]) n+=1 file.close()
位置:爬虫\\create_file1
爬取学习强国,失败,代码如下:
from requests_html import HTMLSession import csv session=HTMLSession() file=open('news_xxqg.csv','w',newline='') csvwriter=csv.writer(file) csvwriter.writerow(['序号','新闻标题']) n=1 ans_new_titles=[] r=session.get('https://www.xuexi.cn/') r.html.render() titles_xxqg=r.html.find('#Ckhjp4r149s000',first=True) ans_new_titles+=titles_xxqg for title in ans_new_titles: csvwriter.writerow([n,title.text]) n+=1 file.close()
五、简单搜索引擎
对存入的文件进行读取
import csv page_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()
保持对斗争的信仰!