分享一下昨天写的爬虫代码
说明:
由于最近在忙着学校内的事情,所以并没有时间为大家添加更加细致的图片分析(就是具体的对网页的分析过程),请见谅,等有时间就会补上
这些案例,在写这条分享时测验过,可以成功,但是不保证能百分百成功(特别时自动签到的,因为只能实验一次,但是这次是成功了的,所以不敢打包票)
案列一:自动登录🐟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() 补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。 学习,学习了。。。。 自学小白菜 发表于 2020-9-26 00:30
补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。
楼主我用的2012,复制进去怎么报错45个 自为其主 发表于 2020-9-26 17:29
楼主我用的2012,复制进去怎么报错45个
抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看 等我晚上有空了,把具体的步骤和截图重新发给大家。
互相学习{:10_275:} 大家如果对于自动登录不太懂,可以看看我新发的贴子,抽打游戏时间赶出来的。{:10_278:} 剩余的两个案例,看大家需不需要,如果需要就做一个详细的分析。
或则说大家还需要爬虫的案例,我还写了一些可以分享给大家,主要最近在把休闲时间来拿学爬虫,所以爬虫的案例多一点,有关于爬虫不懂的可以留言问我,大家一起进步{:10_332:} 自学小白菜 发表于 2020-9-26 20:54
抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看
木事,我又去学其他的拉,谢谢
页:
[1]