爬虫常用库
1.requests
1.获取某一个网页
requests.get(url)
请求的参数可以设置headers等。
2.各种请求
requests.post(url,data = {})
requests.delete(url)
requests.head(url)
requests.options(url)
3.获取网页cookie
response = requests.get(url)
response.cookies
for key,value in response.cookies.items():
print(key + "="+value)
让然获取的从cookie是可以加入到请求的(url,cookies = cookies)
一般也会使用cookie jar
jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
response = requests.get(url, cookies=jar)
print(response.text)
这是使用的比较多的,使用较少的就不列举了,参考文档:https://www.jianshu.com/p/ecb4d54ad8cf
2.selenium
selenium:一个web自动化测试工具,直接运行在浏览器上
1、导包
from selenium import webdriver
2.加载页面
driver = webdrive.Chrome()
3.页面元素的查找
1.获取id标签值
driver.find_element_by_id()
2.获取name标签值
driver.find_element_by_name()
3.获取标签名值
driver.find_elements_by_tag_name()
4.通过xpath匹配(找一个)
driver.find_element_by_xpath()
5.找所有
driver.find_elements_by_xpath()
6.通过css定位
driver.find_element_by_css_selector()
7.向下滚动到页面底部
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
8.关闭当前所在窗口和退出浏览器
driver.close()
driver.quit()
3.lxml
from lxml import etree html = etree.HTML(text)
4.beautiful soup
beautifulsoup对象
主要的功能也是网页抓取数据,Beautifulsoup自动将输入的文档转换为Unicode编码,输出文档转换为utf-8编码。一般beautifulsoup和lxml一起使用
from bs4 import BeautifulSoup
import lxml
import requests
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
步骤:
1.导入bs4,lxml,requests
2.创建BeautifulSoup对象
soup = BeautifulSoup(html,'lxml')
3.打印soup对象的内容
soup.prettify()格式化输出
4.获取页面信息的四种对象
1.Tag(两个重要的属性name,attrs)
tag为html中的一个个标签
soup.title,soup.head,soup.a,soup.p等
2.NavigableString标签
得到了标签的内容,用.string即可获取标签内部的文字
3.Beautifulsoup
表示的是一个文档的全部内容
4.Comment
5.遍历文档树
1.直接子节点
(1)
tag 的 .content 属性可以将tag的子节点以列表的方式输出
soup.head.contents[0]
(2).children
它返回的不是一个list(list生成器对象),不过我们可以遍历获取所以的子节点
2.所有子孙节点
.descendants 属性可以对所有tag的子孙节点进行递归循环
3.节点内容
通过.string返回标签里面的内容
4.多个内容
.strings,获取多个内容,需要遍历获取
5.父节点
p = soup.p
print p.parent.name
6.全部父节点
content = soup.head.title.string
for parent in content.parents:
print(parent.name)
7.兄弟节点
.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 属性获取了该节点的上一个兄弟节点,如果节点不存在,则返回 None
8.全部兄弟节点
.next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出
9.前后节点
.previous_elements .next_element
搜索文档树
find_all(name , attrs , recursive , text , **kwargs )
//css选择器
soup.select()
一般简单网站(对反爬虫没有特别严格),基本上就能使用requests.get(url)直接获取信息,些微麻烦点的需要加上user_agent,等等。那么此处就对反爬的一些策略进行分析。
世界上没有一个网站能做多完美的反爬虫,爬虫与反爬虫的战争就类似于攻与守。
目前比较常规简单有效的手段就是采取后端的反爬虫。
1.user_agent + referer检测
2.账号及cookie验证
3.验证码
4.ip限制频次
对于以上的防范措施,可以使用Chrome selenium或者phantomjs模拟浏览器环境,也就是常说的机器人、tessercat识别验证码、代理ip的替换
以上方法对于一般的网站绰绰有余,反爬更加好一点的,参考下文:http://litten.me/2017/07/09/prevent-spiders/

浙公网安备 33010602011771号