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()

到此我们已经抓取到了该网页的源代码,接下来把多余的标签去掉即可,只保留其中的文字内容。
python爬虫urllib与BeautifulSoup(一)_第1张图片
我们通过对该网站的源代码观察,所有的小说内容都在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)

python爬虫urllib与BeautifulSoup(一)_第2张图片

你可能感兴趣的:(网络爬虫)