Python 爬虫入门 requests lxml bs4

一:前言

正式学习爬虫的第一天,感觉信息量巨大。用此篇博客来快速入门爬虫并爬取古诗文网的内容。(使用 requests lxml bs4)

二:过程

2.1 获取 url 中的 html 代码

中文官方文档指引(http://docs.python-requests.org/zh_CN/latest/user/quickstart.html),内容繁琐比较多,本文精简整理必要内容。

先安装requests

1
pip install requests

在文档中引入

1
2
3
4
5
6
7
import requests

# url 是古诗文网的
url = 'https://so.gushiwen.org/guwen/Default.aspx?p=1&type=%e6%ad%a3%e5%8f%b2%e7%b1%bb'
html = requests.get(url)
print('该响应状态码:', html.status_code)
print('相应内容:', html.text)

如此获得到相应页面的html代码

2.2 解析所需要的HTML代码(beautifulsoup 和lxml是两种解析方式,推荐lxml方式,简单快速)

2.2.1 使用BeautifulSoup来解析

先安装bs4

1
pip install bs4

用靓汤来对response进行解析,获取网页源代码

方法:

1.find(name,attrs,recursive,text,**wargs) find(‘p’)即寻找第一个匹配的p节点

2.find_all(name,attrs,recursive,text,**wargs) find_all(‘p’)即寻找所有p节点

attrs
有两种情况则要用到参数attrs:一是标签字符中带有-,比如data-custom;二是class不能看作标签属性。解决的办法是在attrs属性用字典进行传递参数

css选择器 select()

实例解析:

1
2
3
4
5
6
7
8
9
10
11
12
# 首先引入BeautifulSoup
import requests
from bs4 import BeautifulSoup

# url 是古诗文网的
url = 'https://so.gushiwen.org/guwen/Default.aspx?p=1&type=%e6%ad%a3%e5%8f%b2%e7%b1%bb'
html = requests.get(url)
print('该响应状态码:', html.status_code)
# print(html.content)
bs = BeautifulSoup(html.content, 'html.parser')
b = bs.select('a')
print(b)

2.2.2 使用lxml来解析

先安装lxml

1
pip install lxml

requests是用来获取网页源代码,lxml.etree是用来解析网页的,和beautifulsoup中的html.parser或者lxml解析是一个作用。

1
2
3
4
5
6
7
8
9
10
11
# encoding=utf8
import requests
from lxml import etree

# url 是古诗文网的
url = 'https://so.gushiwen.org/guwen/Default.aspx?p=1&type=%e6%ad%a3%e5%8f%b2%e7%b1%bb'
html = requests.get(url)
print('该响应状态码:', html.status_code)
et = etree.HTML(html.content)
t = et.xpath('/html/body/div[2]/div[1]/div[3]/div[1]/p[2]/text()')
print(t)

效果:

如何获取xpath:

1.打开F12 ,选取所需要的元素

  1. 复制xpath

  1. 替换,发现没有效果。。。。

  2. 原来是开头那里有一个这个东西

导致爬下来的内容中缺了这东西导致爬下来的内容不对称(可能是标签iframe爬不下来。。。。。。)

所以它的xpath应该改一改

这样就可以弄下来了。

xpath语法:

Xpath的使用要用到lxml库解析
@lang 使用@获取属性
@href
详细语法: https://www.runoob.com/xpath/xpath-syntax.html

2.3 装饰器

三:总结

最后发现爬虫也太难搞了吧,一不小心就掉坑里了,找了好久才发现问题。

这个可能要多练习,多熟悉套路啊!!

这几种方法多练习吧,一种不行就换另一种。

-------------本文结束 感谢您的阅读-------------
点击查看