鱼C论坛

 找回密码
 立即注册
查看: 2768|回复: 9

[技术交流] 分享一下昨天写的爬虫代码

[复制链接]
发表于 2020-9-25 11:28:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

说明:
由于最近在忙着学校内的事情,所以并没有时间为大家添加更加细致的图片分析(就是具体的对网页的分析过程),请见谅,等有时间就会补上
这些案例,在写这条分享时测验过,可以成功,但是不保证能百分百成功(特别时自动签到的,因为只能实验一次,但是这次是成功了的,所以不敢打包票)



案列一:自动登录🐟c网站并签到
代码如下(写了算是比较清除的解释):
# -*- coding:utf-8 -*-
# Author: 自学小白菜

'''
说明:
需要的环境:
Chrome浏览器(谷歌浏览器)和chromedriver
第三方模块:selenium
'''

from selenium import webdriver
import time

#安装chromedriver的路劲
path = r'D:\CHROM\chrome\chromedriver.exe'

def sign_in(driver):
    #转到签到页面
    sign_url = driver.find_element_by_xpath('//li[@id="mn_Nac60"]/a').get_attribute('href') #获取’签到‘按钮的href属性
    driver.get(sign_url)
    time.sleep(2)
    # print(sign_url)

    #开始签到
    sign_button_tag = driver.find_element_by_id('JD_sign')
    sign_button_tag.click()
    print('签到成功')
    time.sleep(2)


def login(driver):
    url = 'https://fishc.com.cn/forum.php'
    driver.get(url)
    #测试是否能够返回正确html
    # print(driver.page_source)

    # #获取输入的tag和登录的按钮
    username_tag = driver.find_element_by_id('ls_username')
    password_tag = driver.find_element_by_id('ls_password')
    button_tag = driver.find_element_by_xpath('//button[@type="submit"]')

    #输入用户名和密码
    username = input('请输入用户名:')
    password = input('请输入密码:')

    #向输入框输入
    username_tag.send_keys(username)
    password_tag.send_keys(password)
    #确认登录
    button_tag.click()
    time.sleep(2)
    sign_in(driver)
    #测试用的,保存截图,证明登陆成功
    # time.sleep(5)
    # driver.save_screenshot('fishc.jpg')


def main():
    driver = webdriver.Chrome(executable_path=path)
    login(driver)


if __name__ == '__main__':
    main()

案例二:使用requests爬取一个壁纸网站
代码如下:
# -*- coding:utf-8 -*-
# Author: 自学小白菜
import requests
from lxml import etree
import time
from urllib import request

'''
所需库:
lxml
requests
'''

BASE_PATH='http://pic.netbian.com'

def parse_page(url):
    #标准的头部信息(我发现这个网站反爬虫做的并不是很厉害,好像不需要headers都可以爬)
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
    }
    response = requests.get(url,headers=headers)
    #这里这个网站采取的gbk方式编码(可以在该网页处右击查看源码,搜索charset,里面就有它的编码方式)
    text = response.content.decode('gbk')
    #这里使用了xpath的解析方式,有兴趣的可以使用bs4或者正则
    html = etree.HTML(text)

    #获取图片的src属性,由于src只有部分,差了http://pic.netbian.com这一部分,所以后面会加上
    image_list = html.xpath('//img/@src')
    #删除无用图片,因为该网站的图片,有几张是没有用的,所以就删除了
    image_list.pop(-1)
    image_list.pop(-1)
    #获取图片标题
    title_list = html.xpath('//img/@alt')
    #删除一些不需要的标题,同图片一样,也是有一些不要的标题信息
    title_list.pop(0)
    title_list.pop(0)
    title_list.pop(0)
    title_list.pop(0)
    title_list.pop(-1)
    title_list.pop(-1)
    #测试是否正确
    # print(len(image_list),len(title_list))
    
    #zip是内置函数
    for value in zip(title_list,image_list):
        title,image = value
        image = BASE_PATH+image
        #urllib的request库中有一个专门下载图片等的函数,十分简便,就是urlretrieve,第一个参数是url,第二个是参数是存放的地址,这里我在其当前py文件夹下创建了images文件夹
        request.urlretrieve(image,'images/'+title+'.jpg')



def main():
    page = int(input('请输入需要爬取多少页:'))
    #因为第一页的url和第二页以后的url不同,所以单独处理
    urls = []
    nums = 0
    for i in range(1,page+1):
        if i == 1:
            url = 'http://pic.netbian.com/index.html'
        else:
            url = 'http://pic.netbian.com/index_{page_num}.html'.format(page_num=i)
        urls.append(url) 
        parse_page(url) #分析网页的函数
        time.sleep(2)

if __name__ == '__main__':
    main()

案例三:登陆豆瓣并爬取生化危机(可指定)影评
# -*- coding:utf-8 -*-
# Author: 自学小白菜

import requests
from lxml import etree

def parse_page(session,url):
    #设置头部信息
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
        'Referer':'https://search.douban.com/movie/subject_search?search_text=shenghuaweiji+&cat=1002'
    }
    #获取response响应
    response = session.get(url,headers=headers)
    text = response.content.decode('utf-8')
    #测试用的
    # print(text)

    #下面使用xpath进行解析
    html = etree.HTML(text)
    review_list = html.xpath('//div[@class="main review-item"]')
    for review_tag in review_list:
        name_list = review_tag.xpath('.//header[@class="main-hd"]//a[@class="name"]/text()')
        content_list = review_tag.xpath('.//div[@class="main-bd"]//div[@class="short-content"]/text()')
        for content in content_list:
            print(content)


def get_comments(session):
    #豆瓣影评的url分析,这里爬取的是生化危机,大家可以自己修改url,就可以爬取其他电影了
    target_url = 'https://movie.douban.com/subject/1306809/reviews?start={page}'
    nums = int(input('请输入需要爬取多少页的影评:'))
    for i in range(0,nums):
        url = target_url.format(page=i*20)
        parse_page(session,url) #分析函数


def login():
    '''
    登录豆瓣
    :return: return session
    '''

    #获取session对象
    session = requests.Session()
    login_url = 'https://accounts.douban.com/j/mobile/login/basic'

    #设置头部信息
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
        'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony'
    }
    #输入信息
    username = input('请输入用户名:')
    password = input('请输入密码:')

    #设置data属性
    data = {
        'name':username,
        'password':password,
        'remember':'false'
    }

    #尝试登陆
    try:
        response = session.post(login_url,headers=headers,data=data)
        text = response.content.decode('utf-8')
        print(text)
    except Exception as e:
        print('登录失败,原因是',e)

    #返回session对象
    return session

def main():
    session = login()
    get_comments(session)


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-26 00:30:53 | 显示全部楼层
补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 09:14:44 | 显示全部楼层
学习,学习了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2020-9-26 12:27:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 17:29:27 | 显示全部楼层
自学小白菜 发表于 2020-9-26 00:30
补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。

楼主我用的2012,复制进去怎么报错45个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 20:54:35 | 显示全部楼层
自为其主 发表于 2020-9-26 17:29
楼主我用的2012,复制进去怎么报错45个

抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 20:57:05 | 显示全部楼层
等我晚上有空了,把具体的步骤和截图重新发给大家。

互相学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 23:49:38 | 显示全部楼层
大家如果对于自动登录不太懂,可以看看我新发的贴子,抽打游戏时间赶出来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-27 00:09:09 | 显示全部楼层
剩余的两个案例,看大家需不需要,如果需要就做一个详细的分析。

或则说大家还需要爬虫的案例,我还写了一些可以分享给大家,主要最近在把休闲时间来拿学爬虫,所以爬虫的案例多一点,有关于爬虫不懂的可以留言问我,大家一起进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-27 17:04:58 | 显示全部楼层
自学小白菜 发表于 2020-9-26 20:54
抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看

木事,我又去学其他的拉,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 12:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表