使用BeautifulSoup4解析页面
网页:分为静态页面和动态页面。
- 静态页面:内容是固定的,除非人为的进行内容修改,否则这个页面的内容是一成不变的。
- 动态页面:内容不是固定的,使用某种特殊的技术(JavaScript)使页面中的数据通过某种方式显示在页面中。
-
requests:请求页面,得到响应结果。
requests得到的结果是静态页面的结果。 -
BeautifulSoup:根据响应结果解析页面、提取数据。
bs4模块能从html或者xml中提取数据。
BeautifulSoup(网页源码,解析器):将字符串类型的源代码转换为bs4类型。
bs4模块提供了一系列提取数据的方法,这些方法的操作对象bs4类型的数据。
-
写入文件、数据库
-
headers = {}:headers是一个字典:{key:value},headers是给爬虫提供伪装的。
-
User-Agent:将爬虫伪装成浏览器。
-
select:根据CSS选择器(标签、id等)定位数据,得到的是符合这个选择器的所有结果。(整体是一个列表,列表中每个元素是一个bs4类型的数据)。
-
select_one:根据CSS选择器(标签、id等)定位数据,得到的是符合这个选择器的一个结果。(bs4类型的数据)。
-
text:从bs4类型数据中提取标签内的内容,结果为字符串。
-
attrs:从bs4类型数据中提取标签内容属性值,结果为字符串。
爬取中国新闻网
import requests
from bs4 import BeautifulSoup
# bs4模块能从html或者xml中提取数据。
for page in range(1,11):
URL = f'https://www.chinanews.com.cn/scroll-news/news{page}.html'
Headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
response = requests.get(url=URL,headers=Headers)
# 状态码:200,可爬
if response.status_code == 200:
response.encoding = 'utf-8'
# 打印网页源代码
# print(response.text)
soup = BeautifulSoup(response.text,'html.parser')
# print(soup,type(soup))
li_list = soup.select(
'body > div.w1280.mt20 > div.content-left > div.content_list > ul > li')
# print(li_list)
for i in li_list:
if i.select_one('li > div.dd_lm > a') != None:
news_type = i.select_one('li > div.dd_lm > a').text
# print(news_type,type(news_type))
news_title = i.select_one('li > div.dd_bt > a').text
# print(news_title)
news_href = 'https://www.chinanews.com.cn' + i.select_one('li > div.dd_bt > a').attrs['href']
# print(news_href)
news_time = i.select_one('li > div.dd_time').text
print(news_type,news_title,news_href,news_time