• python学习笔记


    # 爬虫的流程分析:
    1. 请求数据:requests库(这个库可以非常方便的去请求网络数据)
    * 安装方法:pip install requests

    2. 将请求下来的数据解析出来,获取我们想要的数据,把不想要的数据抛弃掉。
    * BeautifulSoup:pip install bs4
    * lxml:pip install lxml

    3. 将解析后的数据保存下来。如果是文字类型的,可以保存到文件中或者是数据库中或者缓存中都可以。如果是文件类型,比如图片,视频,那么可以保存到硬盘中。

    4. 无论你的爬虫是大还是小,他都是由这几个模块组成的。

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # 导入之前安装的库
    import requests
    from bs4 import BeautifulSoup
     
    # 首先定义以个变量url并赋值为目标网站'http://www.0011kytt.com'以及要搜索的电影名movie_name
    # 注意引号,字符串必须用引号包围起来
    movie_name = '武状元苏乞儿'
    url = 'https://www.qsyyw.com/ctview/28755.html'
    # 然后用request.get()来获取网页
    r = requests.get(url)
    # 这里要根据网页的编码来设置解码,这个目标网站编码为'utf-8'
    r.encoding = 'utf-8'
    # 然后获取网页源码并赋值给变量html
    html = r.text
    # 最后打印出网页源码
    #print(html)
    
    
    # 这里利用BeautifulSoup库来解析网页的源码并赋值给soup,方便后面的寻找
    soup = BeautifulSoup(html, "lxml")
    # 因为我们已经知道搜索框在一个叫<div class="search">的地方
    # 所以根据class="search"来找就好了
    # 注意,因为class是python关键字,所以这里要用class_,这是BeautifulSoup的规定
    search = soup.find(class_='fed-navs-search')
    # OK 打印出来看看找得对不对
    #print(search)
    
    
    # 网站搜索页面的url为http://www.0011kytt.com/search/search.php
    search_url = 'https://www.qsyyw.com/vodsearch/-------------.html?wd=精武门'
    # 从网页源码里看到输入位置的input中有个name='keywords'
    # 这个keywords就是用来记录我们输入电影名的变量
    # 于是,我们构造以下变量,用来让爬虫往搜索框填电影名
    formdata = {'type': 'text',
                'keywords': movie_name}
    # requests.post就可以把formdata填进搜索框,并得到搜索结果页面赋值给r_r
    rr = requests.post(search_url, formdata)
    # 同样需要解码
    rr.encoding = 'utf-8'
    # 获取网页源码并赋值给变量html
    rhtml = rr.text
    # 打印看看对不对
    #print(rhtml)
    
    # 首先还是用BeautifulSoup库来解析网页的源码
    r_soup = BeautifulSoup(rhtml, "lxml")
    # 再根据class_='item_pic'找到所有搜索结果,有可能搜索到多个匹配的结果
    movie_div_list = r_soup.find_all(class_='fed-deta-button')
    #print(movie_div_list)
    # 创建一个空的列表movie_url_list来存储搜索结果的详情页链接
    movie_url_list = []
    # 因为有可能搜索到多个匹配的结果
    # 所以这里用一个循环来获取所有搜索结果的电影详情页链接
    for movie_div in movie_div_list:
        # 对每一个搜索结果,找到其中的href里存着的详情页链接
        movie_url = movie_div.a.attrs['href']
        # 把详情页链接存到movie_url_list中
        movie_url_list.append(movie_url)
    # OK 打印看看所有搜索结果的详情页链接
    print(movie_url_list)

    代码进阶二:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # 导入之前安装的库
    import json
    import requests
    from bs4 import BeautifulSoup
    from urllib import `
    
    # url_temp = 'https://lady.163.com/special/00264OOD/data_nd_sense_0{}.js?callback=data_callback'
    # return_list = []
    # url = url_temp.format(7)
    
    # response = requests.get(url)
    # # if response.status_code != 200:
    # #     continue
    # content = response.text  # 获取响应正文
    # _content = formatContent(content)  # 格式化json字符串
    # result = json.loads(_content)
    # return_list.append(result)
           
    url = 'https://www.doutula.com/photo/list/?page=1'
    #先进行heder头部的伪装模拟认为操作
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
        "Referer":url
    }
    # 然后用request.get()来获取网页
    r = requests.get(url,headers=headers)
    # 这里要根据网页的编码来设置解码,这个目标网站编码为'utf-8'
    r.encoding = 'UTF-8'
    # 然后获取网页源码并赋值给变量html
    html = r.text
    # 最后打印出网页源码
    #print(html)
    # 首先还是用BeautifulSoup库来解析网页的源码
    r_soup = BeautifulSoup(html, "lxml")
    # 再根据class_='img-responsive'找到所有搜索结果,有可能搜索到多个匹配的结果, 搜索所有class是这个的img图片div内容
    img_list = r_soup.find_all("img",attrs={"class":"img-responsive lazy image_dta"})
    #print(img_list)
    # 创建一个空的列表movie_url_list来存储搜索结果的详情页链接
    #movie_url_list = []
    
    for img in img_list:
        img_url = img['data-original']
        request.urlretrieve(img_url,"test.jpg")
        break
        #movie_url_list.append(img_url)
    #print(movie_url_list)

    进阶三:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # 导入之前安装的库
    import json
    import requests
    from bs4 import BeautifulSoup
    from urllib import request
    import os
    
    # url_temp = 'https://lady.163.com/special/00264OOD/data_nd_sense_0{}.js?callback=data_callback'
    # return_list = []
    # url = url_temp.format(7)
    
    # response = requests.get(url)
    # # if response.status_code != 200:
    # #     continue
    # content = response.text  # 获取响应正文
    # _content = formatContent(content)  # 格式化json字符串
    # result = json.loads(_content)
    # return_list.append(result)
    
    #用来存储所有页面url
    PAGE_URLS = []
    
    def parse_page(pageurl):
        #先进行heder头部的伪装模拟认为操作
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
            "Referer":pageurl
        }
        # 然后用request.get()来获取网页
        r = requests.get(pageurl,headers=headers)
        # 这里要根据网页的编码来设置解码,这个目标网站编码为'utf-8'
        r.encoding = 'UTF-8'
        # 然后获取网页源码并赋值给变量html
        html = r.text
        # 最后打印出网页源码
        #print(html)
        # 首先还是用BeautifulSoup库来解析网页的源码
        r_soup = BeautifulSoup(html, "lxml")
        # 再根据class_='img-responsive'找到所有搜索结果,有可能搜索到多个匹配的结果, 搜索所有class是这个的img图片div内容
        img_list = r_soup.find_all("img",attrs={"class":"img-responsive lazy image_dta"})
        #print(img_list)
        # 创建一个空的列表movie_url_list来存储搜索结果的详情页链接
        #movie_url_list = []
    
        for img in img_list:
            img_url = img['data-original']
    
            #http://img.doutula.com/production/uploads/image/2021/06/26/20210626674557_tRkLNp.jpg
            splits = img_url.split("/")[-1] #将图片路径分割,拿到最后一个也就是-1 的位置
            ospath = os.path.join("images",splits)
            # print(ospath)
            # break
            request.urlretrieve(img_url,ospath)
            
            #movie_url_list.append(img_url)
            #print(movie_url_list)
    
    def main():
        #1:现获取所有页面url
        for x in range(1,3):
            page_url = 'https://www.doutula.com/photo/list/?page='+str(x)
            # print(page_url)
            # break
            PAGE_URLS.append(page_url)
        #2.获取每一页的图片数据
        for pageurl in PAGE_URLS:
            parse_page(pageurl) #调用上面的函数挨个处理每页的数据
    
    if __name__ == '__main__':
        main()

    进阶四:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # 导入之前安装的库
    import json
    import requests
    from bs4 import BeautifulSoup
    from urllib import request
    import os
    
    # url_temp = 'https://lady.163.com/special/00264OOD/data_nd_sense_0{}.js?callback=data_callback'
    # return_list = []
    # url = url_temp.format(7)
    
    # response = requests.get(url)
    # # if response.status_code != 200:
    # #     continue
    # content = response.text  # 获取响应正文
    # _content = formatContent(content)  # 格式化json字符串
    # result = json.loads(_content)
    # return_list.append(result)
    
    #用来存储所有页面url
    PAGE_URLS = []
    
    def parse_page(pageurl):
        #先进行heder头部的伪装模拟认为操作
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
            "Referer":pageurl
        }
        # 然后用request.get()来获取网页
        r = requests.get(pageurl,headers=headers)
        # 这里要根据网页的编码来设置解码,这个目标网站编码为'utf-8'
        r.encoding = 'UTF-8'
        # 然后获取网页源码并赋值给变量html
        html = r.text
        # 最后打印出网页源码
        #print(html)
        # 首先还是用BeautifulSoup库来解析网页的源码
        r_soup = BeautifulSoup(html, "lxml")
        # 再根据class_='img-responsive'找到所有搜索结果,有可能搜索到多个匹配的结果, 搜索所有class是这个的img图片div内容
        img_list = r_soup.find_all("img",attrs={"class":"img-responsive lazy image_dta"})
        #print(img_list)
        # 创建一个空的列表movie_url_list来存储搜索结果的详情页链接
        #movie_url_list = []
    
        for img in img_list:
            img_url = img['data-original']
    
            #http://img.doutula.com/production/uploads/image/2021/06/26/20210626674557_tRkLNp.jpg
            splits = img_url.split("/")[-1] #将图片路径分割,拿到最后一个也就是-1 的位置
            ospath = os.path.join("images",splits)
            # print(ospath)
            # break
            request.urlretrieve(img_url,ospath)
            
            #movie_url_list.append(img_url)
            #print(movie_url_list)
    
    def main():
        #1:现获取所有页面url
        for x in range(1,3):
            page_url = 'https://www.doutula.com/photo/list/?page='+str(x)
            # print(page_url)
            # break
            PAGE_URLS.append(page_url)
        #2.获取每一页的图片数据
        for pageurl in PAGE_URLS:
            parse_page(pageurl) #调用上面的函数挨个处理每页的数据
    
    if __name__ == '__main__':
        main()

    多进程:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # 导入之前安装的库
    import time
    import threading
    
    
    def greet(index):
        print("helloworld-%d"%index)
        time.sleep(0.5)
    
    #单线程,挨个执行
    def line_run():
        for x in range(5):
            greet(x)    
    
    #多线程,一次性就执行完了
    def duoxian_run():
        for x in range(5):
            #多线程调用greet方法,讲x传递过去
            th = threading.Thread(target=greet,args=[x])
            th.start()
    
    
    if __name__ == '__main__':
        #line_run()
        duoxian_run()
  • 相关阅读:
    Android中Context样式分析
    Android组件化实践
    插着USB mic开机时,系统没有声音问题
    Android7.1 解决ttyUSB串口节点不固定问题
    android中设置里面版本号的显示
    android7.1添加开机启动服务被selinux禁用问题
    Settings中删除一些默认的选项
    es8323codec调节录播音量大小
    user版本串口不能输入
    高新兴GM510模块调试
  • 原文地址:https://www.cnblogs.com/yszr/p/14981643.html
Copyright © 2020-2023  润新知