寫爬蟲時遇到的問題及解決方法


最近在開發個用於信息收集的小工具,第一次做爬蟲,在爬取網頁時遇到了幾個問題,查資料了解一下。

 

一、關於查看網頁源代碼和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

 


免責聲明!

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



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