簡單的爬蟲


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM