python谷歌网页爬虫_python使用chrome driver做简单爬虫

使用python的urllib来抓取网页很容易被当作爬虫来对待

下面是一个使用urllib的例子:

import urllib.request

url = 'http://www.jianshu.com/p/99747a2f29f7'

headers = {

'Connection': 'Keep-Alive',

'Accept': 'text/html, application/xhtml+xml, */*',

'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',

'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'

}

req = urllib.request.Request(url, headers=headers)

response = urllib.request.urlopen(req)

html = response.read().decode()

print(html)

使用selenium

为了防止这种情况,我们可以使用selenium自动控制chrome等浏览器抓取网页数据,使用以上方式抓取网页内容的,还可以让浏览器动态的加载网页内容,这方便了抓取使用ajax动态加载的网页

代码要点:

使用webdriver调用chrome driver,C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe是chrome driver的安装路径

browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')

获取到网页的html代码之后,可以使用BeautifulSoup查找网页标签,通过BeautifulSoup初始化一个bsObj对象之后,可以使用find、find_all查找网页标签,查找到的标签还是继续使用find、find_all方法

bsObj = BeautifulSoup(html, "html.parser")

note_list = bsObj.find("ul", {"class": "note-list"})

article_list = note_list.find_all("li")

如何获得某个标签中的属性,如获得中的href属性

href = i.find('a', {"class": "title"})['href']

如何获得标签中夹杂的文本,如

文本内容

,可以使用get_text方法

times = i.find('div', {"class": "meta"}).a.get_text()

下面是完整代码:

from selenium import webdriver

from bs4 import BeautifulSoup

import time

def get_all_article(uid):

tar_url = 'http://www.jianshu.com/u/' + uid

browser.get(tar_url)

html = browser.page_source

bsObj = BeautifulSoup(html, "html.parser")

note_list = bsObj.find("ul", {"class": "note-list"})

article_list = note_list.find_all("li")

all_article = []

for i in article_list:

href = i.find('a', {"class": "title"})['href']

times = i.find('div', {"class": "meta"}).a.get_text().strip('\n').strip()

all_article.append({'href': href, 'times': times})

return all_article

browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')

browser.set_page_load_timeout(5)

uid = '55672ec82fcd'

all_article = get_all_article(uid=uid)

for article in all_article:

times = int(article['times'])

if times < 10:

for j in range(10-times):

try:

browser.get('http://www.jianshu.com'+article['href'])

time.sleep(0.2)

except Exception as e:

continue

browser.quit()

chrome driver与chrome

这里是chrome driver的下载地址,如果速度太慢,建议使用vpn打开

chrome driver与chrome之间的对应关系,可以查看各个版本下面的notes.txt文件,如这里

下载好chrome driver之后将chromedrive.exe文件放在谷歌浏览器中chrome.exe的同级目录下,接下来就可以使用selenium调用driver

部分对应关系.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值