最近在開發個用於信息收集的小工具,第一次做爬蟲,在爬取網頁時遇到了幾個問題,查資料了解一下。
一、關於查看網頁源代碼和F12內容不一致的問題
查看網頁源代碼:就是別人服務器發送到瀏覽器的原封不動的代碼,也是爬蟲獲得的代碼。
F12:在源碼中找不到的代碼(元素),是在瀏覽器執行js時動態生成的,通過F12看到的就是瀏覽器處理過的最終的html代碼。
解決方法:
1.直接從JavaScript中采集加載的數據,用json模塊處理;
2.直接采集瀏覽器中已經加載好的數據,借助工具PhantomJS。
二、關於瀏覽器訪問正常,爬蟲爬取出現驗證的問題
解決方法:
偽造瀏覽器訪問
url = "" request = urllib.request.Request(url) request.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36') response = urllib.request.urlopen(request) html = response.read() html = str(html,'utf-8')#爬取的網頁源代碼編碼
三、python抓取數據時會自動轉義
解決方法:
headers = { 'Host': '', 'User-Agent': '', 'Cookie': '' } url = '' domain = '' data = { 'target':domain } data = urllib.parse.urlencode(data).encode("utf-8") req = urllib.request.Request(url=url, data=data, headers=headers)#post提交 res = urllib.request.urlopen(req) html = res.read().decode('utf-8') html = html.replace("\\\\",'\\')#\\換成\ html = eval("'{}'".format(html))#python抓取數據時會自動轉義,反轉義功能
四、requests請求時,為了避免ssl認證,將verify=False,但日志中會有大量的warning信息
解決方法:
在請求的時候加一行代碼
requests.packages.urllib3.disable_warnings()
response = requests.get(url, params=params, headers=headers, verify=False)
五、實現跨文件的全局變量
解決方法:
先定義一個全局變量模塊 globalvar.py
def _init(): global _global_dict _global_dict = {} def set_value(name, value): _global_dict[name] = value def get_value(name, defValue=None): try: return _global_dict[name] except KeyError: return defValue
設置全局變量模塊 a.py
import sys import globalvar as gl gl._init() gl.set_value('name', 'cc') gl.set_value('score', 90)
獲取全局變量 b.py
import globalvar as gl name = gl.get_value('name') score = gl.get_value('score') print("%s: %s" % (name, score))
主程序
import a import b
運行主程序文件,輸出 cc: 90
六、正則表達式匹配任意字符(包括換行)
解決方法:
點符號匹配的是除了換行符以外的所有字符
可以用 ([\s\S]*?) 代替 (.*?)
七、ajax數據爬取及selenium添加cookie免登錄
內容較多,另發一篇博客 https://www.cnblogs.com/wkzb/p/12850953.html
參考:
https://www.cnblogs.com/yuantup/p/9761534.html
https://blog.csdn.net/shenkunchang1877/article/details/79086886?utm_source=blogkpcl6
https://www.jianshu.com/p/5bb96ddfbdc8
https://www.cnblogs.com/rnckty/p/7722603.html
https://www.williamlong.info/archives/5781.html