一、使用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()