python爬虫urllib与BeautifulSoup(一)
小白一枚,记录自己学习的过程。
今日的目的是爬取起点小说网的一章小说。
首先我们把需要的包导入
from bs4 import BeautifulSoup
import urllib.request
为了防止反爬虫,还是得先模拟浏览器访问该网站。
模拟浏览器查看另一篇博。
req.add_header('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36')
urllib中包括了四个模块,包括
urllib.request, urllib.error, urllib.parse, urllib.robotparser
urllib.request可以用来发送request和获取request的结果
urllib.error包含了urllib.request产生的异常
urllib.parse用来解析和处理URL
urllib.robotparse用来解析页面的robots.txt文件
urllib.request有一个 urlopen() 方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求,如果请求中需要加入 headers 等信息,我们就可以利用更强大的 Request 类来构建一个请求。
url='https://read.qidian.com/chapter/0Xh7EIK1E5IJiWg6PYdjVg2/5VygD8s_e2Vp4rPq4Fd4KQ2'
req=urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36')
data=urllib.request.urlopen(req)
str=data.read()
到此我们已经抓取到了该网页的源代码,接下来把多余的标签去掉即可,只保留其中的文字内容。
我们通过对该网站的源代码观察,所有的小说内容都在p标签内,而p标签在div标签内,所以只要定位到该标签即可。
我们通过class对div进行区分
soup=BeautifulSoup(str,'html.parser')
content=soup.find("div",class_="read-content j_readContent").text
最后通过输出即可。
完整代码如下
import urllib.request
from bs4 import BeautifulSoup
def demo(url):
req=urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36')
data=urllib.request.urlopen(req)
str=data.read()
soup=BeautifulSoup(str,'html.parser')
content=soup.find("div",class_="read-content j_readContent").text
f=open("xs",'w')
f.write(content)
f.close()
print(content)
if __name__ == '__main__':
url = 'https://read.qidian.com/chapter/0Xh7EIK1E5IJiWg6PYdjVg2/5VygD8s_e2Vp4rPq4Fd4KQ2'
demo(url)