bf4.BeautifulSoup 实践
#test
import requests
from bs4 import BeautifulSoup
import bs4
import numpy as np
def getHtmlText(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"
}
try:
req = requests.get(url, headers=headers, timeout=30)
s = req.raise_for_status()
req.encoding = req.apparent_encoding
req = req.text
return req
except:
return ""
def f_main():
for i in range(10):
url = 'https://movie.douban.com/top250?start={}'.format(25 * i)
getHtmlText(url)
def f_test():
res_list = []
url = 'https://movie.douban.com/top250?start={}'.format(25 * 0)
html = getHtmlText(url)
###
soup = BeautifulSoup(html, 'lxml')
for li in soup.find(attrs=['class', 'grid_view']).children:
list_ = [0, 0, 0, 0, 0, 0, 0]
if isinstance(li, bs4.element.Tag):
list_[0] = li.find('em').string
list_[1] = li.find(attrs=['class', 'title']).string
# list_[2] = li.find(attrs=['class', 'bd']).find(attrs=['class', '']).string.strip().split(" ")[1].replace(' ', '')
# list_[2] = li.find(attrs=['class', 'bd']).find(attrs=['class', ""]).string
list_2_res = li.find(attrs=['class', 'bd']).find(attrs=['class',""]).text.strip().split()
list_[2]=list_2_res[1]
list_[3]=f'{list_2_res[2]} {list_2_res[3]}'
res_list.append(list_)
print(np.array(res_list))
if __name__ == '__main__':
f_test()
soup.select() 选择器
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
test_html = """
<h2>section1</h2>
<p>article</p>
<p>article</p>
<p>article</p>
<h2>section2</h2>
<p>article</p>
<p>article</p>
<p>article</p>"""
soup = BeautifulSoup(test_html, 'lxml')
import re
print(soup.select('h2 ~ p'))
print(soup.select('h2 ~ p')[0])
print((soup.select('h2 ~ p')[0]).string)
print(type(soup.select('h2 ~ p')))
CSS选择器之兄弟选择器(~和+)
区别:‘+’选择器则表示某元素后相邻的兄弟元素,也就是紧挨着的,是单个的。而‘~’选择器则表示某元素后所有同级的指定元素,强调所有的。
https://www.cnblogs.com/jf-67/p/8987341.html
https://www.cnblogs.com/kangby/p/6530416.html
网页源代码
<div>
<h2>section1</h2>
<p>article</p>
<p>article</p>
<p>article</p>
</div>
<div>
<h2>section2</h2>
<p>article</p>
<p>article</p>
<p>article</p>
</div>