第一次作业——结合三次小作业

作业一

(1)用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。

import requests
import bs4
from bs4 import BeautifulSoup
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "lxml")
    for tr in soup.find('tbody').children:#子节点
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].text.strip(), tds[1].text.strip(), tds[2].text.strip(), tds[3].text.strip(),
                           tds[4].text.strip()])
def printUnivList(ulist, num):
    tplt='{0:^5}	{1:{5}^15}	{2:^5}	{3:^10}	{4:^5}'
    print(tplt.format('综合排名','学校','位置','类型','总分',chr(12288)))#chr(12288)是中文空格填充字符
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],u[3],u[4],chr(12288)))
def main():
    unifo=[]
    url='http://www.shanghairanking.cn/rankings/bcur/2020'
    html=getHTMLText(url)
    fillUnivList(unifo, html)
    printUnivList(unifo, 40)
    #爬40所学校
main()

(2)心得体会

网址的变动带来一些小麻烦,又去百度了一些新知识点,都是知识点

作业二

用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# author: xm031804114 time:2020/9/22
import requests
from bs4 import BeautifulSoup

def get_html(url):
    # 模拟浏览器访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/81.0.4044.138 Safari/537.36',
        'accept-language': 'zh-CN,zh;q=0.9'
    }
    print("来了来了")
    response = requests.get(url, headers=headers)  # 请求访问网站
    if response.status_code == 200:
        html = response.text  # 获取网页滴源码
        return html  #获取成功后返回
    else:
        print("获取网站信息失败!")

if __name__ == '__main__':
    #关键字,可以直接更改,不用再去重新复制新的网址
    keyword = '书包'
    # 搜索地址,官网地址加keyword
    search_url = 'https://search.jd.com/Search?keyword=' + keyword + '&enc=utf-8'
    html = get_html(search_url)
    # 初始化BeautifulSoup库,并设置lxml解析器
    soup = BeautifulSoup(html, 'lxml')
    # 找到所有的商品所在的li
    goods_list = soup.find_all('li', class_='gl-item')
    number=0
    for li in goods_list:  # 遍历父节点
        # 商品名称
        name = li.find(class_='p-name p-name-type-2').find('em').get_text()
        # 价格
        price = li.find(class_='p-price').find('i').get_text()
        # 将商品信息放入数组中
        number+=1
        goods = [number,price,name]
        print(goods)

(2)心得体会

淘宝属实比京东难爬,真的要加headers!,还有正则确实要学很多知识点,下面的就很明显

作业三

爬取一个给定网页(http://xcb.fzu.edu.cn/html/2019ztjy)或者自选网页的所有JPG格式文件

输出信息:将自选网页内的所有jpg文件保存在一个文件夹中

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# author: xm031804114 time:2020/9/23

import urllib.request
import os
import re

targetPath  = "D:machinelearn数据采集技术photo"
def saveFile(path):
    # 设置每个图片的路径
    pos = path.rindex('/') #rindex()  返回子字符串 str 在字符串中最后出现的位置
    ans = os.path.join(targetPath,path[pos+1:])
    return ans
url = "http://xcb.fzu.edu.cn/"
#请求
req = urllib.request.Request(url)
#爬取的结果
res = urllib.request.urlopen(req)
#显示结果
data = str(res.read())
urla = "http://xcb.fzu.edu.cn/"
pattern = r'([w./]+.(jpg|JPG))'#只取JPG格式的照片
imgurl = re.findall(pattern, data)
for link,value in imgurl:
    url = urla+str(link)
    print(url) #打印图片链接
    try:
        urllib.request.urlretrieve(url,saveFile(url))#urlretrieve() 方法直接将远程数据下载到本地
    except:
        print("爬取失败")

(2)心得体会

此处接上面就是正则进行筛选就很优秀,需要多百度正则使用方法,os的用法也有点多,又收藏夹里堆着了

原文地址:https://www.cnblogs.com/lmmlm/p/13741665.html