python 爬虫入门--文字爬取

python 爬虫入门–文字爬取

对于爬虫,相信大家都不陌生,但是如何入门,大家还是停留在了解认知阶段吗?那可以试试下边的方法,一起来试一下。

首先我们试试爬取网页中的***文本信息***

使用的是我们的一个requests 第三方库。

#使用 import 导入requests库
import requests
# 使用requests库中 get方法,打开网址
r = requests.get('https://www.qiushibaike.com/text/') 
#打印出网页HTML信息
print(r.text)

下边是打印出来的内容。
在这里插入图片描述


C:\Users\XiaoMi>python D:\微信小程序demo1\小玩意儿\糗事百科爬虫.py
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge">
<meta name="renderer" content="webkit" />
<meta name="applicable-device" content="pc">



<meta name="domain_verify" content="pmrgi33nmfuw4ir2ejyws5ltnbuweyljnnss4y3pnurcyithovuwiir2ejqwmyrtguzdgobsmezdgnbyheywcmzthbrdmmtemu4tamrqg5rtmirmej2gs3lfknqxmzjchiytkmrzgq4demjugaydcnd5">
...

这里打印出来的,就是本网站中 HTML页面代码。

——————————————————————————————

获取页面文本信息

下边获取页面中的文本信息,可以使用到相关的信息。
下边三种都是可以使用,但是各有利弊。

  1. 正则表达式

    适用于数据的匹配,正则表达式写起来会很绕,同时页面内容稍微变化,正则就会失效。对于对正则不是很熟悉的内容,那么写出来的正则表达式会很长,简单匹配会好很多。

  2. Lxml

    Lxml 是专门用来解析 XML 格式文件的库,该模块用 C 语言编写,解析速度很快,和正则表达式速度差不多,但是提供了 XPath 和 CSS 选择器等定位元素的方法。

  3. Beautiful Soup

    这是一个 Python 实现的解析库,相比较于前两种来说,语法会更简单明了一点,文档也比较详细。唯一的一点就是运行速度比前两种方式慢几倍,当数据量非常大时相差会更多。

我们试着写一个简单的网页结构,使用一下bs4试着获取其中内容。

<body>
   <div >
       <ul>
               <li>首页</li>
               <li>新闻</li>
               <li>影视</li>
       </ul>
   </div>
</body>

那写在python中为:

from bs4 import BeautifulSoup
html = '''
<body>
   <div >
       <ul>
               <li>首页</li>
               <li>新闻</li>
               <li>影视</li>
       </ul>
   </div>
    <p style="margin-top: 8px">
    科技有限公司
    </p>
</body>

'''

soup = BeautifulSoup(html, 'html.parser') #加载我们的html文件
print(soup.find('div')) # 找到 div 标签
C:\Users\XiaoMi>python D:\微信小程序demo1\小玩意儿\糗事百科爬虫.py
<div>
<ul>
<li>首页</li>
<li>新闻</li>
<li>影视</li>
</ul>
</div>

现在我们获取的就是所有div内的信息。不包含P标签信息。

现在我们试着获取,li标签中的信息。

html = '''
<body>
   <div >
       <ul>
               <li>首页</li>
               <li>新闻</li>
               <li>影视</li>
       </ul>
   </div>
    <p style="margin-top: 8px">
    科技有限公司
    </p>
</body>

'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser') #加载我们的html文件
# print(soup.find('div')) # 找到 div 标签
print(soup.find_all('li')) # 找到所有 li 标签
[<li>首页</li>, <li>新闻</li>, <li>影视</li>]

那么使用for循环,获取内部文本信息。

li = soup.find_all('li') # 找到所有 li 标签
# '[<li>首页</li>, <li>新闻</li>, <li>影视</li>]'

for i in li:
    print(i.text)    #获取每个 li 标签的内容

打印出内容如下:

首页
新闻
影视

============================================

那么已经可以使用我们的bs4来获取相应网页信息,
那么试着根据网页代码信息,获取一下文本信息吧。

#爬取糗事百科中文本信息
url = https://www.qiushibaike.com/text/

在这里插入图片描述
在这里插入图片描述
我们发现 其实都写在了span标签中了,那么我们可以获取所有span中文本信息。

#导入requests和bs4模块
import requests
from bs4 import BeautifulSoup

#返回网页信息
def download_page(url):
   headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
   # 增加headers, 模拟浏览器
   r = requests.get(url, headers=headers)  
   return r.text

#获取页面中相关作者性别年龄点赞数等信息,
#以及下载糗事内容和评论
def get_content(html, page):
   output = """第{}页 作者:{} 性别:{} 年龄:{} 点赞:{} 评论:{}\n{}\n------------\n""" # 最终输出格式
   soup = BeautifulSoup(html, 'html.parser')
   con = soup.find(id='content')  # 获取每一个填写的div块
   # print(con)
   con_list = con.find_all('div', class_="article")  # 找到文章列表
   print(con_list)
   for i in con_list:
       author = i.find('h2').string  # 获取作者名字
       content = i.find('div', class_='content').find('span').get_text()  # 获取内容
       stats = i.find('div', class_='stats')
       vote = stats.find('span', class_='stats-vote').find('i', class_='number').string
       comment = stats.find('span', class_='stats-comments').find('i', class_='number').string
       author_info = i.find('div', class_='articleGender')  # 获取作者 年龄,性别
       if author_info is not None:  # 非匿名用户
           class_list = author_info['class']
           if "womenIcon" in class_list:
               gender = '女'
           elif "manIcon" in class_list:
               gender = '男'
           else:
               gender = ''
           age = author_info.string   # 获取年龄
       else:  # 匿名用户
           gender = ''
           age = ''

       save_txt(output.format(page, author, gender, age, vote, comment, content))

#文本信息加载到统一文档,并且命名为qiubai.txt ,编码格式为UTF-8
def save_txt(*args):
   for i in args:
       with open('qiubai.txt', 'a', encoding='utf-8') as f:
           f.write(i)


def main():
   # 在页面下方可以看到共有13页,可以构造如下 url,
   for i in range(1, 14):
       url = 'https://qiushibaike.com/text/page/{}'.format(i)
       html = download_page(url)
       get_content(html, i)

if __name__ == '__main__':
   main()

在这里插入图片描述
在这里插入图片描述
这样,我们第一次使用python爬虫,爬取文本信息就完了。

能跑得动的,记得点个赞呗。

后期会有其他方法更新,关注一波呗

猜你喜欢

转载自blog.csdn.net/ailuoyi521/article/details/106620047