ltyc

一、bs4的使用

from bs4 import BeautifulSoup
pip3 install lxml html_doc
=""" <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>绝美护士SOLO尹菲给你一个心潮澎湃的制服之夜 - 性感妹子 - 妹子图</title> <meta name="keywords" content="" /> <meta name="description" content="绝美护士SOLO尹菲给你一个心潮澎湃的制服之夜 - 第1页 - 妹子图每日分享最新最全的高清性感美女图片" /> <script type="text/javascript" src="https://ip.ws.126.net/ipquery?"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/gh/xmzt/static/mzitu/u.js"></script> <link rel="canonical" href="https://www.mzitu.com/133296" /> <link rel="alternate" media="only screen and(max-width: 640px)" href="https://m.mzitu.com/133296" > <meta name="mobile-agent" content="format=html5;url=https://m.mzitu.com/133296" /> <meta name="applicable-device" content="pc"> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <meta name="renderer" content="webkit"> <link href="https://cdn.jsdelivr.net/gh/xmzt/static/mzitu/pc/style.css" rel="stylesheet" type="text/css" /> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?cb7f29be3c304cd3bb0c65a4faa96c30"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </head> <body> <div class="header"> <div class="mainnav"> <h1 class="logo"><a href="https://www.mzitu.com/" title="妹子图">妹子图</a></h1> <ul id="menu-nav" class="menu"><li><a title="首页" href="https://www.mzitu.com/">首页</a></li> <li class="current-menu-parent"><a title="性感妹子" href="https://www.mzitu.com/xinggan/">性感妹子</a></li> <li><a title="日本妹子" href="https://www.mzitu.com/japan/">日本妹子</a></li> <li><a title="台湾妹子" href="https://www.mzitu.com/taiwan/">台湾妹子</a></li> <li><a title="清纯妹子" href="https://www.mzitu.com/mm/">清纯妹子</a></li> <li><a title="妹子自拍" href="https://www.mzitu.com/zipai/">妹子自拍</a></li> <li><a title="街拍美女" href="https://www.mzitu.com/jiepai/">街拍美女</a></li> <li><a title="下载妹子图APP" href="http://www.mzitu.com/app/">下载APP</a></li> """ #类实例化得到一个对象 soup = BeautifulSoup(html_doc,\'lxml\') #lxml是一个解析工具,html_doc是一个html文件数据
#soup对象相当于一个页面对象,可以点出其内部所有的标签或者属性
#遍历文档树:即直接通过标签名字选择,特点就是选择速度快,但如果存在多个相同的标签则只返回第一个

#
1 用法 head=soup.head #找到head标签 # print(head) #2 获取标签的名称 # print(head.name) #3 获取标签的属性 非常重要 # a=soup.body.a # print(a.attrs) #这就是标签的属性 # print(a.attrs.get(\'title\')) # # print(a[\'title\']) #这样也可以取出 #4 获取标签的内容 # a=soup.body.a # print(a.text) #会拿自己标签下子子孙孙的所有内容然后拼接到一起(因为我用的是a标签所有看不出来) # print(a.string)# p下的文本只有一个时,取到,否则为None # print(a.strings)# 生成器对象,加了s # print(list(a.strings))#拿到a标签下所有文本内容,一个一个的在生成器中 # 5 嵌套选择 # a=soup.body.a # print(a.get(\'id\')) #没有则为None #子节点,子孙节点(用的比较少) # print(soup.li.contents)#li下所有子节点 # print(soup.li.children)#得到一个迭代器,包含li下所有子节点 #搜索文档树 #find() 只返回找到的第一个 #find_all() #找到所有的 #五种过滤器:字符串,正则表达式,列表,True,方法 #字符串过滤,过滤的内容是字符串(最常用的) #方法一: # a=soup.find(name=\'a\') #本质就是用的find_all # print(a) # a=soup.find(id=\'menu-nav\') # a=soup.find(class_=\'logo\') #在用class查找的时候后面一定要加class_ # a=soup.find(href=\'https://www.mzitu.com/japan/\') # print(a) #方法二 # res = soup.find(attrs={\'id\':\'menu-nav\'}) # res = soup.find(attrs={\'class\':\'logo\'}) #如果用这种方法,class就不用加_ # print(res) #正则表达式 # import re # re_b = re.compile(\'^m\') # res=soup.find(name=re_b) # res=soup.find_all(name=re_b) # res = soup.find(id=re_b) # print(res) # 列表匹配 # res=soup.find(name=[\'body\',\'a\',\'head\']) # print(res) #True和False # res = soup.find_all(name=True) # res = soup.find_all(id=True) # print(res) # 方法(用函数) 基本不用 # limit(限制查找的条数) # res=soup.find_all(name=\'a\',limit=1) #查找的就是第一条 # print(res) #recursive(recursive默认是True,代表递归查找,找子子孙孙) # res=soup.find_all(name=\'a\',recursive=False) # res=soup.find_all(name=\'a\',recursive=True) # print(res) #css选择器 # ret=soup.select(\'#re_b\') # print(ret) ret=soup.select(\'body li\')#body下的li子子孙孙 # ret=soup.select(\'body>div\')#直接子节点 # ret=soup.select(\'body>div\')[0].text#直接子节点,取出子节点的内容,拼接到一起 # ret=soup.select(\'body>div\')[0].a.find()#直接子节点 # print(ret) #bs4的修改文档树 软件配置文件是xml格式的(了解) #现在主流的软件的配置文件格式 #ini:configparser #conf #xml:可以用bs4修改 #yaml

二、爬取汽车之家新闻

import requests
import re
# pip3 install beautifulsoup4  解析html和xml,修改html和xml
from bs4 import BeautifulSoup
headers={\'user-agent\':\'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 QIHU 360EE\',


}
res = requests.get(\'https://www.autohome.com.cn/news/\')
# print(res.text)
# 第一个参数:需要解析的数据
# 第二个参数:解析器(html.parser内置的,不需要安装第三方模块)
# soup = BeautifulSoup(res.text,\'html.parser\')
# soup = BeautifulSoup(res.text,\'lxml\')#用这种方法会中文文字出现乱码
soup = BeautifulSoup(res.content, \'lxml\')#获取到的是二进制,会自动解码
# 查找class为article-wrapper的div
# div=soup.find(class_=\'article-wrapper\')
# div=soup.find(id=\'auto-channel-lazyload-article\')
# print(div)
ul = soup.find(class_=\'article\')
# print(ul)
# 继续找ul下的所有li
li_list = ul.find_all(name=\'li\')
# print(len(li_list))
for li in li_list:
    # 找每个li下的东西
    title = li.find(name=\'h3\')
    if title:
        title = title.text
        # url = li.find(\'a\')[\'href\'] #拿到li中的a标签,然后通过字典取值,拿到href
        # li.find(\'a\').attrs  #这个才是字典
        url = \'https:\' + li.find(\'a\').attrs.get(\'href\')  # .attrs是li对象的一堆属性,是一个字典,由于属性中ongoing只有href,所以直接拿出来了
        desc = li.find(\'p\').text
        img = \'https:\'+li.find(name=\'img\')[\'src\'] #最好用.attrs.get(\'src\')
        # print(img)
        # print(desc)
        # print(url)
        # print(title)
        print("""
        新闻标题:%s
        新闻地址:%s
        新闻摘要:%s
        新闻图片:%s
        
        """%(title,url,desc,img))

三、代理池的搭建

# github,下载免费代理池开源代码(建议读一下别人的代码)
# git clone git@github.com:jhao104/proxy_pool.git
# pycharm打开,修改配置文件(reids地址修改)
# 启动爬虫:
python proxyPool.py schedule
# 启动服务:
python3 proxyPool.py server

# 随机获取一个代理
requests.get("http://127.0.0.1:5010/get/").json()
#删除一个代理
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

五、超级鹰

#!/usr/bin/env python
# coding:utf-8

import requests
from hashlib import md5


class Chaojiying_Client():

    def __init__(self, username, password, soft_id):
        self.username = username
        self.password = password.encode(\'utf8\')

        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
        \'user\': self.username,
        \'pass2\': self.password,
        \'softid\': self.soft_id,
    }
        self.headers = {
        \'Connection\': \'Keep-Alive\',
        \'User-Agent\': \'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)\',
    }


    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
            \'codetype\': codetype,
        }
        params.update(self.base_params)
        files = {\'userfile\': (\'ccc.jpg\', im)}
        r = requests.post(\'http://upload.chaojiying.net/Upload/Processing.php\', data=params, files=files,
                          headers=self.headers)
        return r.json()


    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
            \'id\': im_id,
        }
        params.update(self.base_params)
        r = requests.post(\'http://upload.chaojiying.net/Upload/ReportError.php\', data=params, headers=self.headers)
        return r.json()


if __name__ == \'__main__\':
    chaojiying = Chaojiying_Client(\'306334678\', \'lqz12345\', \'903641\')  # 用户中心>>软件ID 生成一个替换 96001
    im = open(\'a.jpg\', \'rb\').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    print(chaojiying.PostPic(im, 1902))# 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()

 

分类:

技术点:

相关文章:

  • 2021-12-05
  • 2021-12-05
  • 2021-12-05
  • 2021-12-05
  • 2021-12-05
  • 2021-05-18
  • 2021-12-05
猜你喜欢
  • 2021-12-05
  • 2021-12-05
  • 2021-12-05
  • 2021-12-05
  • 2021-12-05
  • 2021-12-15
相关资源
相似解决方案