Mac——利用Python进行网页爬取

                                             Mac——利用Python进行网页爬取

 

目标:利用Python爬取网页中的指定内容,例如,爬取百度百科网页中四川省的别名。

输出:四川省的别名为:川、蜀、天府之国

 

个人经验,网页爬取主要掌握2个核心点:

  • 网页爬虫的原理(Python爬虫入门教程:超级简单的Python爬虫教程)
  • 正则表达式的灵活应用(Python3 正则表达式,正则表达式-菜鸟教程)

说得直白一点,就是从一大堆文本中(网页=html代码)快速找到个人感兴趣的信息(爬取结果)!接下来,本文分为3步来进行实现。

 

1、打开待爬取的网页

        百度输入四川省,点击进入,复制链接:https://baike.baidu.com/item/四川/212569?fromtitle=四川省&fromid=15626925,这个链接看着不爽,可以试试打开链接https://baike.baidu.com/item/四川省(爬取的时候用这个链接,批处理方便些)也是可以的!打开后的界面如下:

Mac——利用Python进行网页爬取_第1张图片
 

2、在当前页面,点击鼠标右键,查看网页源代码

Mac——利用Python进行网页爬取_第2张图片

这里打开网页看源代码的主要目的:利用正则表达式,对爬取后的网页内容进行关键词提取。

 

3、Python代码编写(爬取网页内容 + 正则提取感兴趣的信息)

import requests
import re
from urllib import parse

# step 1: 获取网页内容
def getHtml(url):
    try:
        req_headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
        }
        r = requests.get(url, headers=req_headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except EOFError:
        print("fail")

# step 2: 利用正则表达式从网页中提取关键词
# 例如: 爬取省份的别名
def craw_baidubaike(province_name):
    ori_url = "https://baike.baidu.com/item/xxx"
    with open("craw_results.txt", "w", encoding="utf-8") as file:
        # -- windows系统需要进行编码转换
        # province_parse = parse.urlencode({"wd": province_name})[3:]
        # url = ori_url.replace("xxx", province_parse)
        url = ori_url.replace("xxx", province_name)
        html = getHtml(url)

        pattern_page_format = re.compile('名\n
\n(.*?)\n
', flags=re.DOTALL) province_abbreviate = re.findall(pattern_page_format, html)[0] print("{0}的别名为: {1}".format(province_name, province_abbreviate)) if __name__ == "__main__": craw_baidubaike(province_name="四川省")

输出:

四川省的别名为: 川、蜀、天府之国

 

其中,代码中的4个地点需要注意:

  • req_headers的设置
  • 网页内容的编码处理
  • 网页url在windows上可能不支持中文拼接
  • 正则表达式的编写:'名\n
    \n(.*?)\n
    '

这里主要用到了(.*?) ,它表示匹配任意字符到下一个符合条件的字符。再回顾下待提取的这段html代码(换行符:"\n"),

别    名
川、蜀、天府之国

细细地再品下,问题不大!知道了这个原理,相信能够快速地爬取其他网页中感兴趣信息。

例如:爬取 四川大学的简称,将craw_baidubaike()中的代码改成下面的内容

pattern_page_format = re.compile('称\n
\n(.*?)\n
', flags=re.DOTALL) university_abbreviate = re.findall(pattern_page_format, html)[0] print("{0}的简称为: {1}".format(university_name, university_abbreviate))

输出:

四川大学的简称为: 川大、SCU

Mac——利用Python进行网页爬取_第3张图片

你可能感兴趣的:(自然语言处理,python自学,python编程)