Python Spider: 爬取项目外包网站TaskCity

对于想要做软件外包的小伙伴们来说,每天登陆外包网站,并且搜索合适的项目,是很累人并且十分枯燥的事情。使用Python爬虫,可以自动对外包网站上面最新的软件外包项目进行搜索、提取和保存。可以大大提高大家的工作效率。

该项目使用Python爬虫,实现对项目外包网站TaskCity的项目信息抓取。并将信息保存到Excel文件中。主要包括两部分:网页抓取信息处理

网页抓取:采用urllib抓取读取网页,使用re正则提取有用的信息。

信息处理:使用openpyxl和pandas,将信息保存到Excel文件,网址使用超链接格式。 

 Spider.py

from urllib import request
import re
import time
import random
from bs4 import BeautifulSoup
import Disposer as Dp

# 定义变量:URL 与 headers
base_url = 'http://www.taskcity.com'
url = 'http://www.taskcity.com/projects?utf8=%E2%9C%93&keywords=%E4%B8%8A%E6%B5%B7&enter=%E9%A1%B9%E7%9B%AE&commit=%E6%90%9C%E7%B4%A2' #向测试网站发送请求
#重构请求头,伪装成 Mac火狐浏览器访问,可以使用上表中任意浏览器的UA信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0'}

data = {'名称': [],
		'发布时间': [],
		'预算': [],
		'链接': []}

while(None != url):
	# 1、创建请求对象,包装ua信息
	req = request.Request(url=url,headers=headers)
	# 2、发送请求,获取响应对象
	res = request.urlopen(req)
	# 3、提取响应内容
	html = res.read().decode('utf-8')

	# 寻找HTML规律,书写正则表达式,使用正则表达式分组提取信息
	pattern = re.compile(r'<a title="(.*?)".*?项目发布时间:(.*?)</span><br/>.*?项目预算:(.*?)<br/>', re.S)

	r_list=pattern.findall(html)
	is_find = 0
	title_name = Dp.get_last_project_name("TaskCity")
	print(title_name)

	for info in r_list:
		if (info[0] != title_name):
			data['名称'].append(info[0])
			data['发布时间'].append(info[1])
			data['预算'].append(info[2])
			data['链接'].append(url)
			print(info)
		else:
			print("Get the last information, name: " + info[0])
			is_find = 1
			break

	if (is_find == 1):
		break

	# 每爬取一个页面随机休眠1-2秒钟的时间
	time.sleep(random.randint(1, 2))

	soup = BeautifulSoup(html, "html.parser")
	url = soup.find('a', attrs={'rel': 'next'})
	if (url != None):
		url = url.get('href')
		url = base_url + str(url)

Dp.insert_data_to_sheet_head(data, "TaskCity")

Disposer.py 

import openpyxl
import pandas as pd

filename = '软件外包项目汇总.xlsx'

def make_hyperlink(value):
	return '=HYPERLINK("%s", "%s")' % (value, "网址")

def get_last_project_name(sheet_name):
	wb = openpyxl.load_workbook(filename)
	ws = wb.get_sheet_by_name(sheet_name)
	return ws.cell(row = 2, column = 1).value

def insert_data_to_sheet_head(dict_data, sheet_name):
	# Returns a DataFrame
	df = pd.read_excel(filename, sheet_name)
	df_dict = pd.DataFrame.from_dict(dict_data)
	df_dict['链接'] = df_dict['链接'].apply(lambda x: make_hyperlink(x))

	wb = openpyxl.load_workbook(filename)
	ws = wb.get_sheet_by_name(sheet_name)

	links = []
	for i in range(2, ws.max_row + 1):  # 2nd arg in range() not inclusive, so add 1
		links.append(ws.cell(i, 4).value)

	df['链接'] = links

	df = pd.concat([df_dict, df])

	# Reassign the index labels
	df.index = [*range(df.shape[0])]
	df.to_excel(filename, sheet_name, index=False)

def insert_data_to_sheet_tail(dict_data, sheet_name):
	# Returns a DataFrame
	df = pd.read_excel(filename, sheet_name)
	df_dict = pd.DataFrame.from_dict(dict_data)
	df_dict['链接'] = df_dict['链接'].apply(lambda x: make_hyperlink(x))

	wb = openpyxl.load_workbook(filename)
	ws = wb.get_sheet_by_name(sheet_name)

	links = []
	for i in range(2, ws.max_row + 1):  # 2nd arg in range() not inclusive, so add 1
		links.append(ws.cell(i, 4).value)

	df['链接'] = links

	df_dict = pd.concat([df, df_dict])
	# Reassign the index labels
	df_dict.index = [*range(df_dict.shape[0])]
	df_dict.to_excel(filename, sheet_name, index=False)

 

 项目源代码:

PythonSpiderTaskCity.rar-Python文档类资源-CSDN下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenSun-1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值