今天學習了使用爬蟲抓取貓眼電影top100,特此總結學習途中遇到的問題和知識:
1.使用requests請求被禁
然後在get請求中response = requests.get(url,headers=headers)
解決方法2:使用selenium抓取網頁源**,詳情見selenium版本**
2.strip()方法的使用:
strip() 方法用於移除字串頭尾指定的字元(預設為空格)。
3.編碼格式的改變:
在open()方法中新增encoding="utf-8"和在dumps()中新增ensure_ascii=false使輸出為utf-8編碼
4.str()方法:
str() 函式將物件轉化為適於人閱讀的形式。返回乙個物件的string格式。即把資料轉換為字串
5.yeild的使用:
簡單地講,yield 的作用就是把乙個函式變成乙個 generator(生成器),帶有 yield 的函式不再是乙個普通函式,python 直譯器會將其視為乙個 generator
個人理解:使用yield後產生乙個類似陣列的可迭代的東西,並把它叫做生成器,它每次僅迭代一次(好吧我還是有點迷糊orz)
實戰**如下:
import requests
from requests.exceptions import requestexception
import re
from multiprocessing import pool#為實現多程序
import json
def get_one_page(url):
# 這是乙個獲取url並判斷是否成功的函式
try:
response = requests.get(url,headers=headers)
# print(response)
if response.status_code == 200:
return response.text#返回網頁源**
return none#否則返回none
except requestexception:
return none
def parse_one_page(html):
#這是乙個篩選函式
pattern = re.compile('.*?board-index.*?">(\d+).*?data-src="(.*?)".*?name">(.*?).*?class="star">(.*?)
.*?releasetime">(.*?)
.*?integer">(.*?).*?fraction">(.*?).*?',re.s)#新增re.s使.可以匹配換行符
items = re.findall(pattern,html)
for item in items:
yield
def write_to_file(content):
#這是乙個把資料儲存到檔案的函式
#encoding="utf-8"和ensure_ascii=false)使資料以中文形式輸出
with open('result.txt','a',encoding="utf-8") as f:#引數a表示直接往後追加
f.write(json.dumps(content,ensure_ascii=false)+'\n')#轉成字串形式
f.close()
def main(offset):
#主函式
url = ''+str(offset)#把offset變成字串
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__ == '__main__':
"""正常抓取
for i in range(10):
main(i*10)
"""#多程序抓取
pool = pool()
pool.map(main,[i*10 for i in range(10)])
#selenium版
import json
from multiprocessing import pool#為實現多程序
from selenium import webdriver
import re
def get_one_page(url):
#這是乙個獲取url並判斷是否成功的函式
browser = webdriver.chrome()
try:
browser.get(url)
html = browser.page_source#得到網頁源**
browser.close()#關閉測試瀏覽器j
return html
except:
return none
def parse_one_page(html):
#這是乙個篩選函式
pattern = re.compile('.*?board-index.*?">(\d+).*?data-src="(.*?)".*?name">(.*?).*?class="star">(.*?)
.*?releasetime">(.*?)
.*?integer">(.*?).*?fraction">(.*?).*?',re.s)#新增re.s使.可以匹配換行符
items = re.findall(pattern,html)
for item in items:
yield
def write_to_file(content):
#這是乙個把資料儲存到檔案的函式
#encoding="utf-8"和ensure_ascii=false)使資料以中文形式輸出
with open('result.txt','a',encoding="utf-8") as f:#引數a表示直接往後追加
f.write(json.dumps(content,ensure_ascii=false)+'\n')#轉成字串形式
f.close()
def main(offset):
#主函式
url = ''+str(offset)#把offset變成字串
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__ == '__main__':
"""正常抓取
for i in range(10):
main(i*10)
"""#多程序抓取
pool = pool()
pool.map(main,[i*10 for i in range(10)])
Python實戰 抓取貓眼電影TOP100
話不多說,直接上 coding utf 8 import requests from requests import requestexception import re import json from multiprocessing import pool def get one page ur...
多程序抓取貓眼電影top100
import json from multiprocessing import pool import requests from requests.exceptions import requestexception import re 建構函式,輸入乙個url 傳送請求後返回該 的響應結果 de...
Top100貓眼電影爬取案例
儲存請求頭的列表 ua list mozilla 5.0 compatible msie 9.0 windows nt 6.1 win64 x64 trident 5.0 net clr 2.0.50727 slcc2 net clr 3.5.30729 net clr 3.0.30729 medi...