爬取網頁源碼
❶ 用requests庫爬取網站源碼問題
這個網頁是JavaScript非同步載入的,直接用requests爬不到你想要的網頁源碼。
❷ 爬蟲,爬取的網頁源碼為啥中間一部分缺失
缺失部分是動態載入的,基本上是由ajax非同步獲取。你需要F12打開開發者模式找到這個函數或者直接找請求記錄,自己再去模擬這個請求數據。
❸ 新手求助:爬一個網頁發現爬下來的網頁源碼
隱藏的源代碼?不知道你指的是什麼?我的理解有兩種,一是不在前段顯示,但是查看源代碼時有,二是,非同步載入的內容在前端和源代碼中均看不到,第一種很容易解決,想必你指的時第二種,解決方法有三種:
模擬瀏覽器,動態獲取,可以使用大殺器selenium工具
使用這種方法可以實現只要能看到就能抓取到,如滑鼠滑過,非同步載入等,因為他的行為可以與瀏覽器一模一樣,但是這種方式的效率卻是最低的,一般不到實在沒有辦法的時候不推薦使用。
執行js代碼
在python中執行非同步載入的js代碼,獲得一些諸如滑鼠滑過,下拉載入更多等,但是現在的網站中都有非常多的js代碼,要找到需要執行的目標js代碼時非常困難和耗時的,此外python對js的兼容性也不是很好,也不推薦使用。
找到非同步載入的json文件,最常用,最方便,最好用的方法,這是我平常抓取動態非同步載入網站時最常用的方法,可以解決我99%的問題。具體的使用方法是打開瀏覽器的開發者工具,轉到network選項,之後重新載入網頁,在network中的列表中找到載入過程中載入的需要動態非同步載入的json文件,以京東為例,如圖,第一張找到的是非同步載入的庫存信息的json文件,第二招找到的是非同步載入的評論信息的json文件:
具體更詳細的方法可以google或網路
❹ python 怎樣爬去網頁的內容
用python爬取網頁信息的話,需要學習幾個模塊,urllib,urllib2,urllib3,requests,httplib等等模塊,還要學習re模塊(也就是正則表達式)。根據不同的場景使用不同的模塊來高效快速的解決問題。
最開始我建議你還是從最簡單的urllib模塊學起,比如爬新浪首頁(聲明:本代碼只做學術研究,絕無攻擊用意):
這樣就把新浪首頁的源代碼爬取到了,這是整個網頁信息,如果你要提取你覺得有用的信息得學會使用字元串方法或者正則表達式了。
平時多看看網上的文章和教程,很快就能學會的。
補充一點:以上使用的環境是python2,在python3中,已經把urllib,urllib2,urllib3整合為一個包,而不再有這幾個單詞為名字的模塊。
❺ Python怎麼爬取證才通這家網站的源碼
不知道你是用框架還是用 Selenium 爬的內容, iframe 里的內容實際上就是另一個網頁了。
你只是爬它的源碼是爬不到的, 你要提取 iframe 里的 src 所指向的網址, 重新打開它, 然後才爬他的源碼。 或者如果你用框架, 裡面應該有另外提供方法, 讀取 iframe 中的內容
❻ python3.9。在網頁源代碼中爬取的漢字代碼如何轉換回漢字
以前總是覺得,爬蟲是個很高大上的東西,就像盜取別人的數據一樣。現在才知道,爬蟲能爬到的,都是網頁上能看到的,說白了就是別人給你看的。
所謂爬蟲,就是先獲取網頁的源代碼,然後從源代碼中篩選出自己想要的資源,比如網頁上的圖片、視頻等文件,甚至網頁上的文字。接下來,我們就用Python來爬取網頁上的圖片。
首先我們先獲取網站的源碼。
然後就是從萬千的源碼中解析出自己想要的資源了,我這里想要的是網站上的圖片。
個人覺得,這個爬蟲考驗的,還是正則表達式的功底,怎麼寫好正則表達式,才能將所有想要的資源都解析出來,其他的都比較簡單。
以下是我從網頁上爬下來的部分圖片。
❼ python,求一個簡單的selenium+re的網頁源碼爬取
網頁爬取不一定要用Selenium,Selenium是為了注入瀏覽器獲取點擊行為的調試工具,如果網頁無需人工交互就可以抓取,不建議你使用selenium。要使用它,你需要安裝一個工具軟體,使用Chrome瀏覽器需要下載chromedriver.exe到system32下,如使用firefox則要下載geckodriver.exe到system32下。下面以chromedriver驅動chrome為例:
#-*-coding:UTF-8-*-
fromseleniumimportwebdriver
frombs4importBeautifulSoup
importre
importtime
if__name__=='__main__':
options=webdriver.ChromeOptions()
options.add_argument('user-agent="Mozilla/5.0(Linux;Android4.0.4;GalaxyNexusBuild/IMM76B)AppleWebKit/535.19(KHTML,likeGecko)Chrome/18.0.1025.133MobileSafari/535.19"')
driver=webdriver.Chrome()
driver.get('url')#你要抓取網路文庫的URL,隨便找個幾十頁的替換掉
html=driver.page_source
bf1=BeautifulSoup(html,'lxml')
result=bf1.find_all(class_='rtcspage')
bf2=BeautifulSoup(str(result[0]),'lxml')
title=bf2.div.div.h1.string
pagenum=bf2.find_all(class_='size')
pagenum=BeautifulSoup(str(pagenum),'lxml').span.string
pagepattern=re.compile('頁數:(d+)頁')
num=int(pagepattern.findall(pagenum)[0])
print('文章標題:%s'%title)
print('文章頁數:%d'%num)
whileTrue:
num=num/5.0
html=driver.page_source
bf1=BeautifulSoup(html,'lxml')
result=bf1.find_all(class_='rtcspage')
foreach_resultinresult:
bf2=BeautifulSoup(str(each_result),'lxml')
texts=bf2.find_all('p')
foreach_textintexts:
main_body=BeautifulSoup(str(each_text),'lxml')
foreachinmain_body.find_all(True):
ifeach.name=='span':
print(each.string.replace('xa0',''),end='')
elifeach.name=='br':
print('')
print(' ')
ifnum>1:
page=driver.find_elements_by_xpath("//div[@class='page']")
driver.execute_script('arguments[0].scrollIntoView();',page[-1])#拖動到可見的元素去
nextpage=driver.find_element_by_xpath("//a[@data-fun='next']")
nextpage.click()
time.sleep(3)
else:
break
執行代碼,chromedriver自動為你打開chrome瀏覽器,此時你翻頁到最後,點擊閱讀更多,然後等一段時間後關閉瀏覽器,代碼繼續執行。
❽ python爬蟲怎麼獲取動態的網頁源碼
一個月前實習導師布置任務說通過網路爬蟲獲取深圳市氣象局發布的降雨數據,網頁如下:
心想,爬蟲不太難的,當年跟zjb爬煎蛋網無(mei)聊(zi)圖的時候,多麼清高。由於接受任務後的一個月考試加作業一大堆,導師也不催,自己也不急。
但是,導師等我一個月都得讓我來寫意味著這東西得有多難吧。。。今天打開一看的確是這樣。網站是基於Ajax寫的,數據動態獲取,所以無法通過下載源代碼然後解析獲得。
從某不良少年寫的抓取淘寶mm的例子中收到啟發,對於這樣的情況,一般可以同構自己搭建瀏覽器實現。phantomJs,CasperJS都是不錯的選擇。
導師的要求是獲取過去一年內深圳每個區每個站點每小時的降雨量,執行該操作需要通過如上圖中的歷史查詢實現,即通過一個時間來查詢,而這個時間存放在一個hidden類型的input標簽里,當然可以通過js語句將其改為text類型,然後執行send_keys之類的操作。然而,我失敗了。時間可以修改設置,可是結果如下圖。
為此,僅抓取實時數據。選取python的selenium,模擬搭建瀏覽器,模擬人為的點擊等操作實現數據生成和獲取。selenium的一大優點就是能獲取網頁渲染後的源代碼,即執行操作後的源代碼。普通的通過 url解析網頁的方式只能獲取給定的數據,不能實現與用戶之間的交互。selenium通過獲取渲染後的網頁源碼,並通過豐富的查找工具,個人認為最好用的就是find_element_by_xpath("xxx"),通過該方式查找到元素後可執行點擊、輸入等事件,進而向伺服器發出請求,獲取所需的數據。
[python]view plain
#coding=utf-8
fromtestStringimport*
fromseleniumimportwebdriver
importstring
importos
fromselenium.webdriver.common.keysimportKeys
importtime
importsys
default_encoding='utf-8'
ifsys.getdefaultencoding()!=default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
district_navs=['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']
district_names=['福田區','羅湖區','南山區','鹽田區','寶安區','龍崗區','光明新區','坪山新區','龍華新區','大鵬新區']
flag=1
while(flag>0):
driver=webdriver.Chrome()
driver.get("hianCe/")
#選擇降雨量
driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()
filename=time.strftime("%Y%m%d%H%M",time.localtime(time.time()))+'.txt'
#創建文件
output_file=open(filename,'w')
#選擇行政區
foriinrange(len(district_navs)):
driver.find_element_by_xpath("//div[@id='"+district_navs[i]+"']").click()
#printdriver.page_source
timeElem=driver.find_element_by_id("time_shikuang")
#輸出時間和站點名
output_file.write(timeElem.text+',')
output_file.write(district_names[i]+',')
elems=driver.find_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")
#輸出每個站點的數據,格式為:站點名,一小時降雨量,當日累積降雨量
foreleminelems:
output_file.write(AMonitorRecord(elem.get_attribute("title"))+',')
output_file.write(' ')
output_file.close()
driver.close()
time.sleep(3600)
- 文件中引用的文件testString只是修改輸出格式,提取有效數據。
#Encoding=utf-8
defOnlyCharNum(s,oth=''):
s2=s.lower()
fomart=',.'
forcins2:
ifnotcinfomart:
s=s.replace(c,'')
returns
defAMonitorRecord(str):
str=str.split(":")
returnstr[0]+","+OnlyCharNum(str[1])
- 一小時抓取一次數據,結果如下:
[python]view plain
❾ python怎麼爬取網頁源代碼
#!/usr/bin/env python3
#-*- coding=utf-8 -*-
import urllib3
if __name__ == '__main__':
http=urllib3.PoolManager()
r=http.request('GET','IP')
print(r.data.decode("gbk"))
可以正常抓取。需要安裝urllib3,py版本3.43