本文已参与「新人创作礼」活动,一起开启掘金创作之路。
from bs4 import BeautifulSoup
import requests
f = open("菜价表格爬取.csv",mode='w',encoding='utf-8')
headers = {
'user-agent': '自己的ua'}
url = 'http://zhongdapeng.com/shucaijiage/1072.html'
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8' #第一步就解码,不要解码text文本,他默认utf-8,不能重复解码
# html = html.encode('gb2312') document.charse查看解码方式,在控制台输入即可
html = response.text
page = BeautifulSoup(html, "html.parser")
table = page.find("tbody")
#attrs={"width": "200", "height": "38", "align": "left", "valign": "middle"} td
# print(table)
# print(type(table))
trs = table.find_all("tr")[1:]
# print(trs[0].text)
for i in trs:
xxi = i.text
# print(len(xxi))
# xxi = xxi.split(" ")
xxi = xxi.split("\n")
xuhao1 = xxi[2]
name1 = xxi[4]
jg1 = xxi[6]
xuhao2 = xxi[8]
name2 = xxi[10]
jg2 = xxi[12]
print(xuhao1, name1, jg1)
print(xuhao2, name2, jg2)
f.write(f"{xuhao1}, {name1}, {jg1}\n")
f.write(f"{xuhao2}, {name2}, {jg2}\n")
f.close()
response.close()
# print(xxi)
# print(response.text)
# name = re.findall('td width="200" height="38" align="left" valign="middle"><a target="_blank" href=".*?" class="opu_l1">(.*?)</a></td>', response.text)
# print(name)
# print(response.text)
# soup = BeautifulSoup(html, 'lxml')
# # print(soup.title)
# # print(soup.head)
# # print(soup.a)
# # print(soup.p)
# # print(type(soup.a)) #<class 'bs4.element.Tag'>
# print(soup.name)
# print(soup.table)
用css选择器获取所需信息,放弃re的匹配方式
"html.parser"指的是解析方法
- 简单选择器(根据名称、id、类来选取元素)
- [组合器选择器]( "CSS 组合器")(根据它们之间的特定关系来选取元素)
- [伪类选择器]( "CSS 伪类")(根据特定状态选取元素)
- [伪元素选择器]("CSS 伪元素")(选取元素的一部分并设置其样式)
- [属性选择器]("CSS 属性选择器")(根据属性或属性值来选取元素) 选取所有指定元素之后的相邻兄弟元素。
相邻兄弟元素选择器
与相邻兄弟元素选择器相比,
相邻兄弟元素选择器只是选择紧跟着的兄弟元素,
后续元素选择器选择所有符合条件的兄弟元素
效果如下: