python bs4库_python库:bs4,BeautifulSoup库、Requests库

本文详细介绍了如何使用Python的BeautifulSoup(bs4)库和Requests库进行网页数据抓取。首先讲解了bs4的安装、基本使用方法,包括解析HTML文档、查找元素以及通过CSS选择器提取数据。接着介绍了Requests库的使用,如发送HTTP请求,处理响应内容。此外,还展示了结合正则表达式进行数据过滤,并提供了实际爬取案例,如爬取廖雪峰Python教程的目录及网页内容。
摘要由CSDN通过智能技术生成

Beautiful Soup

http://www.imooc.com/learn/712  视频课程:python遇见数据采集

https://segmentfault.com/a/1190000005182997  PyQuery的使用方法

importbs4print(bs4.__version__) #当前版本是4.5.3  2017-4-6

安装第三方库

C:\Python3\scripts\> python pip.exe install bs4 (引入第三方库 bs4 )——BeautifulSoup

C:\Python3\scripts\> python pip.exe install html5lib(引入第三方库 html5lib )——html5解析器,BeautifulSoup要用到

打开本地的zzzzz.html文件,用 BeautifulSoup 解析

from urllib importrequestfrom bs4 importBeautifulSoupimport html5lib #html5解析器

url='file:///C:/Python3/zz/zzzzz.html'resp=request.urlopen(url)

html_doc=resp.read()

soup= BeautifulSoup(html_doc,'lxml')#使用BeautifulSoup解析这段代码。'lxml'是解析器,除此之外还有'html.parser'、'xml'、'html5lib'等

print(soup.prettify()) #按照标准的缩进格式的结构输出

print(soup.title)#

标签

print(soup.title.string)#

标签的文字

print(soup.find(id="div111"))#查找id

print(soup.find(id="div111").get_text())#获得标签内的所有文本内容文字

print(soup.find("p", {"class": "p444"}))#查找

print(soup.select('.p444'))#css选择器!!! (这里的数据类型是 list)

for tag1 in soup.select('.p444'):print(tag1.string)print(soup.select('.div2 .p222'))#css选择器!!!

print(soup.findAll("a"))#所有标签

for link in soup.findAll("a"):print(link.get("href"))print(link.string)

使用正则

importre

data= soup.findAll("a",href=re.compile(r"baidu\.com"))for tag22 indata:print(tag22.get("href"))

练习1:解析一个网页

由于win7上的编码解码问题搞不定,只好先使用标准html5的网页了。先拿廖大的python教程页做练习了,抓取左侧的目录

#-*- coding: utf-8 -*-

from urllib importrequestfrom bs4 importBeautifulSoupimport html5lib #html5解析器

url="http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000"resp=request.urlopen(url)

html_doc=resp.read()#使用BeautifulSoup解析这段代码。'lxml'是解析器,除此之外还有'html.parser'、'xml'、'html5lib'等

soup = BeautifulSoup(html_doc,'html.parser')#soup = BeautifulSoup(html_doc,'lxml')

#按照标准的缩进格式的结构输出#print(soup.prettify())

f= open("c:\\Python3\zz\\0.txt","w+")for tag1 in soup.select('.x-sidebar-left-content li a'):#ss = tag1.get_text()

ss =tag1.string

ss2= tag1.get("href")print(ss,"---","http://www.liaoxuefeng.com",ss2)

f.writelines(ss+ "--- http://www.liaoxuefeng.com"+ss2+"\n")#写入字符串

f.close()

2017-10-18:

http://www.cnblogs.com/zhaof/p/6930955.html  一些解析器(Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。)

爬取 http://www.bootcdn.cn,获得一个字典( dict["包名称": star数值]  ),存入文本文件:  (一个想法,可以定期扒一次,例如3个月。再比对上次的dict记录,观察哪些项目的星升的比较快。比较受关注。)

#python 3.6.0

import requests #2.18.4

import bs4 #4.6.0

importhtml5lib

url= "http://www.bootcdn.cn/"

#url = "http://www.bootcdn.cn/all/"

headers = {'User-Agent': 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/61.0.3163.100 safari/537.36'}

r = requests.get(url,headers=headers)#r=requests.get(url)

print(r.encoding) #获得编码

print(r.status_code) #获得状态码

soup= bs4.BeautifulSoup(r.content.decode("utf-8"), "lxml") #'lxml'是解析器,除此之外还有'html.parser'、'xml'、'html5lib'等#soup = bs4.BeautifulSoup(r.content, "html5lib")#aa = soup.decode("UTF-8", "ignore")#print(soup.prettify())#按照标准的缩进格式的结构输出

#将数据解析成字典

element = soup.select('.packages-list-container .row')

starsList={}for item inelement:#print(item.select("h4.package-name"))

#print(item.select(".package-extra-info span"))

#print(item.h4.text)

#print(item.span.text)

starsList[item.h4.text]=item.span.textprint(starsList)#将字典存入文本文件

importtimefrom datetime importdatetimetry:

f= open('1.txt', 'a+')

t2=datetime.fromtimestamp(float(time.time()))

f.write('\n'+str(t2))

f.write('\n'+str(starsList))finally:iff:

f.close()

爬取廖雪峰的python教程:(就是先用bs4解析左边的目录列表,拿到链接,存为字典,并保存到文本文件中。再扒取。)  共123条,但我只扒下28个文件

importrequestsimportbs4importurllib

url="http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000"

#r = requests.get(url) #这里不加header,不让爬了

headers = {'User-Agent': 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/61.0.3163.100 safari/537.36'}

r= requests.get(url,headers=headers)

soup= bs4.BeautifulSoup(r.content.decode("utf-8"), "lxml")#生成字典,并保存在文本文件中

f = open("c:\\Python3\\zz\\liaoxuefeng\\a.txt","w+")

mylist= soup.select('#x-wiki-index .x-wiki-index-item')

myhrefdict={}for item inmylist:

myhrefdict[item.text]= "https://www.liaoxuefeng.com" + item["href"]#print(item.text,item["href"]) #item.text tag1.string item["href"] item.get("href")。

#f.writelines(item.text + " --- http://www.liaoxuefeng.com"+item["href"]+"\n")#写入字符串

f.write(str(myhrefdict))

f.close()#爬取文件

i =0for key,val inmyhrefdict.items():

i+= 1name= str(i) + '_' + key + '.html'link=valprint(link,name)

urllib.request.urlretrieve(link,'liaoxuefeng\\' + name) #提前要创建文件夹

Requests库:  2017-10-30

http://www.python-requests.org/en/master/api/  Requests库 API文档

http://www.cnblogs.com/yan-lei/p/7445460.html  Python网络爬虫与信息提取

requests.request()  构造一个请求,支撑以下各方法的基础方法

requests.get(url, params=None, **kwargs)获取HTML网页的主要方法,对应于HTTP的GET

requests.head(url, **kwargs)获取HTML网页头信息的方法,对应于HTTP的HEAD

requests.post(url, data=None, json=None, **kwargs)向HTML网页提交POST请求的方法,对应于HTTP的POST

requests.put(url, data=None, **kwargs)向HTML网页提交PUT请求的方法,对应于HTTP的PUT

requests.patch(url, data=None, **kwargs)向HTML网页提交局部修改请求,对应于HTTP的PATCH

requests.delete(url, **kwargs)向HTML页面提交删除请求,对应于HTTP的DELET

代理:  2018-2-5

importrequests

proxies={"http": "http://10.10.1.10:3128","https": "http://10.10.1.10:1080",

}

requests.get("http://aaa.com", proxies=proxies)

https://www.v2ex.com/t/364904#reply0  带大家玩一个练手的数据采集(简洁版)

http://www.xicidaili.com/nn/  高匿免费代理

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值