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()

 

posted @ 2021-07-07 15:21  御世制人  阅读(132)  评论(0编辑  收藏  举报