浏览器抓取网页(PYTHON的安装(已安装,可跳过此步骤))
优采云 发布时间: 2022-01-09 15:03浏览器抓取网页(PYTHON的安装(已安装,可跳过此步骤))
(一)PYTHON安装(已经安装,可以跳过此步)
1、PYTHON下载
PYTHON官网:
根据对应系统下载,这里是window系统,点击windows,根据自己系统的操作位数下载
添加环境变量:
如果没有添加,可以自己在电脑上添加
(二)安装第三方库
安装selenium和pyquery,cmd命令下输入pip install selenium(pyquery安装类似)
如果报错,进入python目录下的scripts目录,然后输入命令
如果python的IDLE下没有报错,说明安装成功
(三)浏览器及对应浏览器驱动的安装
这里主要使用chrome浏览器,去谷歌官网下载安装,安装后查看谷歌版本,点击关于谷歌浏览器
(通常在这里找到)
我的版本:67.0
下载对应的webdriver(这里没有人推测每3个版本对应一个v65-67---v2.38,即v68-70--v2.39)
下载链接:
将下载好的chromedriver.exe解压,放到python36目录下(或者python36目录下的脚本)
IDLE下执行以下代码,会自动打开你的谷歌浏览器(环境搭建)
(四)详细示例代码
需求:爬取股票网站信息((“好”或“坏”)和“相关股票”),点击加载更多
(1)打开浏览器获取相关信息:
(2)网页分析(selenium有很多定位方式,这里用的比较少)
上述代码中,data已经拥有了网页当前页面的所有内容(可以输出观察);我们现在只需要从中获取我们想要的数据
在网页中,右键,检查元素,(或检查)分析网页:(由于获取的数据可能与网页分析的数据不同,建议输出数据并分析正则表达式从数据)
我们使用正则表达式查找所有以 1 开头并以 2 结尾的内容并使用 findall 函数
实现点击:(点击后“好股”和“相关股”的规律会与首页不同(后期点击与第一次点击相同))
定位方法如下:(用的比较少,这里就不详细介绍了,大家自己理解):
当您知道元素的 id 属性时使用 find_element_by_id 。使用此策略,将返回 id 属性值与位置匹配的第一个元素。
当您知道元素的名称属性时使用 find_element_by_name。使用此策略,将返回 id 属性值与位置匹配的第一个元素。
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
附上源代码:
#coding=utf-8
from selenium import webdriver
import time
import re
from pyquery import PyQuery as pq
def openurl(url,num):
browser = webdriver.Chrome() #打开浏览器
browser.get(url) #进入相关网站
html=browser.page_source #获取网站源码
data=str(pq(html)) #str() 函数将对象转化为适于人阅读的形式。
dic={}
re_rule=r'(.*?)'
datalist=re.findall(re_rule,data,re.S)
for i in range(0,len(datalist)):
rule1=r'/img/icon-lihao.png(.*?)'
bullish = re.findall(rule1,datalist[i],re.S)
if len(bullish)==0:
rule1=r'/img/icon-likong.png(.*?)'
bullish = re.findall(rule1,datalist[i],re.S)
rule2=r'(.*?)'
stock_name=re.findall(rule2,datalist[i], re.S)
if len(stock_name) > 0 and len( bullish) > 0:
for c in range(0,len(stock_name)):
dic[stock_name[c]]= bullish[0]
print("正在爬取第",len(dic)+1,"个请稍等.....")
c=len(datalist)
if len(dic) < num:
while(1):
browser.find_element_by_class_name("home-news-footer").click()
time.sleep(1)
html=browser.page_source
data=str(pq(html))
datalist=re.findall(re_rule,data,re.S)
for i in range(c,len(datalist)):
rule3=r'/img/icon-lihao.png(.*?)'
bullish = re.findall(rule3,datalist[i],re.S)
if len(bullish)==0:
rule5=r'/img/icon-likong.png(.*?)'
bullish = re.findall(rule5,datalist[i],re.S)
rule4=r'(.*?)'
stock_name=re.findall(rule4,datalist[i], re.S)
if len(stock_name) > 0 and len( bullish) > 0:
for c in range(0,len(stock_name)):
dic[stock_name[c]]= bullish[0]
c=len(datalist)
if len(dic) > num :
browser.quit()
print("爬取完毕!!")
break
print("正在爬取第",len(dic)+1,"个请稍等.....")
else:
browser.quit()
print("爬取完毕!!")
return dic
url='https://www.xuangubao.cn/'
dict=openurl(url,3)
print(dict)
#f=open("F:\\text.txt","a")
#for key,values in dict.items():
#f.write((key+"\t"))
#print(key,values)
#f.close()
---------------------
原来的: