爬虫的另外一种匹配方法就是就是bs4
首先要理解的什么是超文本标记语言,对bs4做解析,用bs4做逻辑的提取。
<h1>i love you</h1>
对bs4做解析,用bs4做逻辑的提取,html是超文本标记语言,用不同的标签对网页的内容进行标记,使网页显示出不同的展示效果。
不同的标签有不同的标记信息,h1:标签 align:属性 center:属性值
<标签 属性:"属性值">被标记的内容</标签>
<img src='xxx.jpg'/>自带闭合
<br>自带闭合
<a href='http://www.baidu.com'>周杰伦</a>
这次爬取是一个农贸市场的菜场价格,很多发布在网上的排行榜都是可以爬取的信息。
首先还是先把需要的包拿进来,这里用到的有bs4的beautifulSoup
还是requests.get()拿到数据,然后text提取所有的数据信息。
import requests,pprint
from bs4 import BeautifulSoup
import csv
Use_info = {
"User-Agent":""
}
url ='http://www.ayljzscsc.com/SignPage-detail-id-1140251.html'
resp1 = requests.get(url,headers = Use_info)
resp1.encoding= 'utf-8'
data = resp1.text
resp1.close()
这里的find信息可能不好理解,打开网页源码,可以看到这些是我们在超链接文本当中定位到的信息,find就是拿到这个超文本的内容。
#解析数据
#1.把页面源代码交给beautifulSoup进行处理,生成bs对象
page = BeautifulSoup(data,"html.parser") #指定html解释器
#2。从bs4 找数据 find(标签 ,属性=值) find_all(标签 ,属性=值)
table=page.find('div',class_="news-nr-box")
#class是python的关键字,
trs = table.find_all('tr',align="center",bgcolor="#FFFFFF")
#pprint.pprint(trs[0:3])
接着遍历你所找到的内容,选到内容所代表的意思,td的选择也是从文本中看出来的。
for tr in trs:
tds = tr.find_all('td')
name = tds[0].text#.text 表示提取到被标签标记的内容
high = tds[1].text
low = tds[2].text
xianjia = tds[3].text
danwei = tds[4].text
date = tds[5].text
csvwriter.writerow([name.strip('-'),high,low,xianjia,danwei,date])
然后将爬去下来的内容放在文件里面就好,
f = open('菜价.csv',mode = 'w',endcoding = 'utf-8')
csvwriter = csv.writer(f)
csvwriter.writerow([name.strip('-'),high,low,xianjia,danwei,date])
f.close()
这里是完整的代码
#换一个青岛市的蔬菜水果市场
import requests,pprint
from bs4 import BeautifulSoup
import csv
Use_info = {
"User-Agent":""
}
url ='http://www.ayljzscsc.com/SignPage-detail-id-1140251.html'
resp1 = requests.get(url,headers = Use_info)
resp1.encoding= 'utf-8'
data = resp1.text
resp1.close()
f = open('菜价.csv',mode = 'w',endcoding = 'utf-8')
csvwriter = csv.writer(f)
#解析数据
#1.把页面源代码交给beautifulSoup进行处理,生成bs对象
page = BeautifulSoup(data,"html.parser") #指定html解释器
#2。从bs4 找数据 find(标签 ,属性=值) find_all(标签 ,属性=值)
table=page.find('div',class_="news-nr-box")
#class是python的关键字,
trs = table.find_all('tr',align="center",bgcolor="#FFFFFF")
#pprint.pprint(trs[0:3])
for tr in trs:
tds = tr.find_all('td')
name = tds[0].text#.text 表示提取到被标签标记的内容
high = tds[1].text
low = tds[2].text
xianjia = tds[3].text
danwei = tds[4].text
date = tds[5].text
csvwriter.writerow([name.strip('-'),high,low,xianjia,danwei,date])
f.close()
print("done!")