Python爬虫实战

需求

抓取2018年四川大学自主招生初审通过名单信息。

具备知识

1.正则表达式。

2.python基础语法,爬虫和数据库操作。

操作

1.抓取网页。

2.解析出需要的数据。

3.继续抓取下一个页面,重复12步骤直到到尾页停止。

4.将解析出来的数据存入数据库。

实例

采用python3.6和mysql

import urllib.request
import re
import pymysql

def catch_page(url_addr):
    try:
        page_data = urllib.request.urlopen(url_addr).read()
    except urllib.URLError as e:
        if hasattr(e,'code'):
            print('服务器不能接受请求 错误码:',e.code)
        elif hasattr(e,'reason'):
            print('无法抵达服务器,请检查url和读的原因!\n 原因:',e.reason)
    return page_data

def find_all_data(html):
    pattern = "<tr>[\s\S]*?<td>(.*?)</td>" \
              "[\s\S]*?<td>(.*?)</td>" \
              "[\s\S]*?<td>(.*?)</td>" \
              "[\s\S]*?<td>(.*?)</td>[\s\S]*?</tr>" #[\s\S]*?匹配任意字符

    userdata = re.findall(pattern,html)
    return userdata

def add_to_mysql(userdatas):
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='scdx_zzzs_db', charset='utf8')
    cursor = conn.cursor()
    for userdata in userdatas:
        sql = "insert into student(name,sex,school,province) values('%s','%s','%s','%s');" % (userdata[0], userdata[1], userdata[2], userdata[3])
        try:
            cursor.execute(sql)
            print("√执行成功----->>" + sql)
        except:
            print("×执行失败----->>" + sql)
    conn.commit()
    cursor.close()
    conn.close()


userdatas = []
i = 0
while i<=3300:
    url = "https://gaokao.chsi.com.cn/zzbm/mdgs/detail.action?oid=476754340&lx=1&start=%d" % i
    html = catch_page(url).decode()
    userdatas.extend(find_all_data(html))
    print(i)
    i += 30

add_to_mysql(userdatas)

执行完就成功从网页抓取数据存入数据库中了。

猜你喜欢

转载自www.cnblogs.com/StringSir/p/9195212.html