爬虫是模仿网页浏览:
正常浏览网页:
(1)使用浏览器打开某个网址
(2)通过浏览器接收并显示网页
(3)用眼睛查找所需内容
当前爬虫:
(1)使用requests类库打开某个网址
(2)网页接收并保存在 requests的返回值
(3)类似 用正则查找字符串,用 BeautifulSoup查找网页内容
注:虽然import没写,但是要安装 lxml 包
from bs4 import BeautifulSoup
import requests
import os
序号值 = 0
def 序号():
global 序号值
序号值 += 1
return str(序号值) + ':'
# 主函数的写法
if __name__ == "__main__":
# 补全请求头的信息
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
}
# 爬取首页
网站基础url = "http://xiaohua.zol.com.cn"
网站首页url = f"{网站基础url}/new/" # http://xiaohua.zol.com.cn/new/
response = requests.get(网站首页url, headers=headers)
# assert是断言,判断后面那个表达式是否为真,不为真就报错,逗号后面是报错信息
assert response.status_code == 200 , "首页爬取失败"
# 解析首页页面,获取子页面链接
详情页url列表 = []
soup = BeautifulSoup(response.text, "lxml")
# -- 定位到所有a标签
tagList = soup.select("body > div:nth-child(7) > div.main > ul > li > span.article-title > a")
# print(tagList)
for tag in tagList:
# 可以用attrs来看看有什么属性
# print(tag.attrs)
详情页url = f'{网站基础url}{tag["href"]}' # http://xiaohua.zol.com.cn/detail60/59434.html
详情页url列表.append(详情页url)
# 访问详情页并解析
文章列表 = []
详情页url列表 = 详情页url列表[:5]
for url in 详情页url列表:
文章 = {}
response = requests.get(url, headers=headers)
assert response.status_code == 200, '详情页爬取失败'
soup = BeautifulSoup(response.text, "lxml")
标题tag = soup.select("body > div:nth-child(7) > div.main > div.section.article > div.article-header > h1")[0]
# .string指的是tag内部包含的文本
# .contents指的是tag的子节点。也包含.string的文本
文章["标题"] = str(标题tag.string)
内容tag = soup.select("body > div:nth-child(7) > div.main > div.section.article > div.article-text")[0]
# .strings指的是tag子节点的全部文本
# .stripped_strings去除了空白符
文章["内容"] = 内容tag.stripped_strings
文章列表.append(文章)
for 文章 in 文章列表:
print()
print()
print(f"{序号()} {文章['标题']}")
for p in 文章["内容"]:
print(p)