python 簡單爬取本地文件與爬取網頁 使用requests和bs4,及自己問題的解決
爬取本地文件:
# -*- coding: cp936 -*-
#import requests
from bs4 import BeautifulSoup
def getZY():
txt=open("d:\cs.txt")
con=txt.read()
print(con)
soup = BeautifulSoup(con, "html.parser")
hu=soup.find_all('span') #{'class':'t3'}
#hu=soup.find_all('span',{'class':'t3'}) #{'class':'t3'}
for h in hu:
print(h.get_text())
def main():
getZY();
main()
爬取網頁(亂碼!):
# -*- coding: cp936 -*-
import requests
from bs4 import BeautifulSoup
def getHTMLText(url):
try:
r = requests.get(url, timeout = 30)
#r.content.decode('gbk','ignore')
r.raise_for_status()
#r.encoding = 'utf-8'
return r.text
except:
return ""
def getContent(url):
html = getHTMLText(url)
#print(html)
soup = BeautifulSoup(html, "html.parser")
#print(soup)
divs=soup.find_all('div',{'class':"el"})
#print(divs)
for div in divs:
try:
t3=div.find('span',{'class':'t3'}).get_text()
print(t3)
t4=div.find('span',{'class':'t4'}).get_text()
print(t4)
t5=div.find('span',{'class':'t5'}).get_text()
print(t5)
except:
print("t3 or t4 ot t5 not find,this can be ignore")
print("over!")
def main():
getContent(url);
url = "https://search.51job.com/list/010000%252C020000%252C030200%252C040000,000000,0000,00,9,99,python%2520java,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare="
main()
問題:
emmm暑假做過一點爬蟲 關於 企業家 的資訊 當時看的是 封皮是一個動物 屬於圖靈一系列的 叫啥忘了....當時遇到的問題是:
1. 亂碼(現在還是迷糊)
2. 網頁跳轉(可以通過函式呼叫 實現通過一個網頁得到另一個網頁的內容 )
3. 使用Ajax爬取
4. 有的內容是後臺返回給網頁 爬取不到
5. 搜問題的時候遇到了 頁數是什麼+1,但是我在函式呼叫的時候直接page+1,所以並沒有遇到搜到的那個問題
6. 沒有嘗試 模擬點選過程
7. 沒有隱藏自己 的資訊 輕易的就能被發現....
6~解決:
# -*- coding: cp936 -*-
# 訪問百度,模擬自動輸入搜尋
# 程式碼中引入selenium版本為:3.4.3
# 通過Chrom瀏覽器訪問發起請求
# 需要對應版本的Chrom和chromdriver
#chromdriver需要下載與本機chrom瀏覽器對應的版本
#https://chromedriver.storage.googleapis.com/index.html
#下載後放在chrom.exe檔案下 並配置path 但依舊會出錯
#簡單暴力的直接放在 本指令碼檔案對應的目錄下
#此程式碼來自https://blog.csdn.net/qq_878799579/article/details/73321015
#執行中錯誤及補充見 https://blog.csdn.net/qq_39065788?t=1
from selenium import webdriver
# 引入Keys類包 發起鍵盤操作
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
# 訪問百度
driver.get('http://www.baidu.com')
# 輸入框輸入內容
driver.find_element_by_id('kw').send_keys('python')
# 3s
time.sleep(3)
# 刪除多輸入的一個m (刪除操作 模擬鍵盤的Backspace)
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)
time.sleep(3)
# 輸入空格 + '教程'
driver.find_element_by_id('kw').send_keys(Keys.SPACE)
driver.find_element_by_id('kw').send_keys(u"教程")
time.sleep(3)
# 模擬ctrl+a 操作 全選輸入框內容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
time.sleep(3)
# 模擬Ctrl+X 操作 剪下輸入框內容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')
time.sleep(3)
# 模擬Ctrl+V 操作 將剪下內容填入輸入框
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')
time.sleep(3)
# 模擬回車操作 ,開始搜尋
driver.find_element_by_id('su').send_keys(Keys.ENTER)
time.sleep(3)
# 退出
driver.quit()
對應chromDriver版本: