参考链接:
获取 url,标题以及时间。。。。(很简单的奥,xpath一下子就可以提取到了)
(这次主要是练习多线程和批处理存入数据库的,所以只是简单的解析,获取页面元素)
重要思路: 开启多线程时
1)首先将爬取的url 放入到数据结构的队列里,保证数据安全。
2)将爬取到的结果,全部存入到一个结果集队列里,进行下一步的操作。
3)队列里的get和put方法不要混淆,put是向队列里添加元素,get是取出或者是踢出并返回这个元素!!!!
第一步: 创建线程以及存储队列:
def main():
start_url = Queue.Queue() # 存放url的队列
result_queue = Queue.Queue() # 结果集队列
for i in range(1, 3):# 网站分页
page_url = 'http://data.stcn.com/list/djsj_%s.shtml' % i
start_url.put(page_url) # 将值添加到start_url队列中
# 构建线程
thread_list = [] # 存放线程的容器
for n in range(4): # 一次运行4 个线程
# 创建线程,target调用get_news_url方法,args传入参数
t_t = threading.Thread(target=get_news_url, args=(start_url, result_queue))
thread_list.append(t_t)
for t in thread_list:
t.start() # 启动线程
第二步:解析网页,获取目标元素(不多介绍了哈)
def get_news_url(start_url, result_queue): # 在main方法里传入参数
result = []
while start_url.qsize():
page_url = start_url.get() # 从队列中取出并返回这个数据
try:
response = requests.get(page_url)
except Exception as e:
print "抓取网页错误,错误为:%s" % e
return None
if response.status_code == 200:
selector = etree.HTML(response.text