(python爬虫项目)某婚恋网的简单数据爬取

爬取项目目标网站:
www.7rdao.com

想要获得的数据:
获取想要省份用户基本信息。
(你想要哪个省就爬哪个省份咯)

既然目标明确,工具齐备.
话不多说,直接打开网页分析.

网页分析:
(python爬虫项目)某婚恋网的简单数据爬取
这是我们想获取的信息.先提交一次看有什么反应!

(python爬虫项目)某婚恋网的简单数据爬取完整的URL:
http://www.7rdao.com/user/search.aspx?sex=0&ddl_StartAge=23&ddl_EndAge=28&ddl_Province=%E5%9B%9B%E5%B7%9D&ddl_City=%E6%88%90%E9%83%BD&ddl_Area=%E5%8C%BA%E3%80%81%E5%8E%BF
是这样的一个字符出形式,从参数的命名可以看出来相关需要提交的参数和受控制所对应的元素。
sex=性别,0是女,1是男
ddl_StartAge=开始年龄
ddl_EndAge=结束年龄
ddl_Province=省份
ddl_City=城市
ddl_Area=县和区
这就是第一次操作得到的结果,我们试试能不能少提交某个参数,可不可以得到一些反馈,我就先把县和区的选项删除了。
修改后的URL:
http://www.7rdao.com/user/search.aspx?sex=0&ddl_StartAge=23&ddl_EndAge=28&ddl_Province=%E5%9B%9B%E5%B7%9D&ddl_City=%E6%88%90%E9%83%BD
一样可以获得相关数据,我们测试一下翻页情况(python爬虫项目)某婚恋网的简单数据爬取
然后我们开始删除的东西并没有再次出现,但是多了一个 &page=2 ,更换成别的数字 也可以.这东西。
你们也可以自己尝试在URL一下修改省份和城市什么的,看会不会返回你不想看到的信息!这里我们得到了 基本的页面信息。
然后再点到用户信息 去看看我们具体需要什么东西!!
还是一样观察URL变化,看能不能获得什么有用的信息。
(python爬虫项目)某婚恋网的简单数据爬取
新点了几个用户
第一个用户:
http://www.7rdao.com/user1/4483570.html
新点开的几个用户:
http://www.7rdao.com/user1/4480668.html
http://www.7rdao.com/user1/4419870.html
http://www.7rdao.com/user1/4482382.html
发现一个共同点,就是/数字.html这样的一个规律,那么,我们回到上一个页面,打开F12检查一下,相对应的4个数字,都在当前页面是否出现,以及出现在哪里。

(python爬虫项目)某婚恋网的简单数据爬取
这里我们可以暂时把正则写出来!

<a href="http://www.7rdao.com/user1/(\d+).html" target="_blank">
这是我们写的正则,一会写代码的时候再拿进去验证,看下效果!
然后我们再去用户页面看看需要用户 的哪些信息!
(python爬虫项目)某婚恋网的简单数据爬取
打开F12观察一下!!
(python爬虫项目)某婚恋网的简单数据爬取(python爬虫项目)某婚恋网的简单数据爬取下面就该是构建我们的代码!

先导入相关的库:
import re, random, time
import requests
from bs4 import BeatifulSoup as bs

rq = requests.Session()

def info_user_id(url):
"""
获取用户id
"""
html = rq.get(urls).text
id_list = set(re.findall(r'http://www.7rdao.com/user1/(\d+).html', html, re.S))
# 匹配出来发现有重复的,我们可以用set去重!
# 也可以用另外一个正则匹配
# id_list = re.findall(r'<a href="javascript:SendLove\(\d+\);" rel="nofollow">', html, re.S))
for id in id_list:
yield id

def get_user_inner(user_id_url,headers=None):
"""
提取用户基本信息
"""
try:
uers = rq.get(user_id_url).text
html = bs(uers, "lxml")
user_content = html.findAll("dd")
# print(user_content)
return {
'昵称': user_content[2].get_text(),
'性别': user_content[3].get_text(),
'身高': user_content[4].get_text(),
'年龄': user_content[5].get_text(),
'生日': user_content[6].get_text(),
}
# 地址我就不获取了,毕竟我都知道她是哪的了,对吧!!
except RequestException:
print("无法获取用户资料")

def main(url, add_city,province=''四川", page=1, ranger=0, age=18):
header = {
'Host': 'www.7rdao.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

urls = ("{}{}&ddl_StartAge={}&ddl_EndAge={}&ddl_Province={}&ddl_City={}&page={}").format\
(url, str(ranger), str(age), str(age),province, add_city, page)

user_id_list = get_info_id(url)
for user_id in user_id_list:
user_hml = 'http://www.7rdao.com/user1/'+str(user_id)+'.html'
user_inner = get_user_inner(user_html)
print(user_inner)

if __name__ == '__mian()__':
url = http://www.7rdao.com/user/search.aspx?sex=
age = input(默认年龄18,请输入你的目标年龄: \n)
ranger = input(默认性别女,请输入你的目标性别:1 男 \n)
pro = input(默认四川,请输入你的目标省份: \n)
add = input(请输入你的目标城市: \n)
page for page range(1,101):
main(url,add,pro,page,ranger,age)

这博客写得好累,而且这破编辑器还没有缩进,以后换个博客写,这代码我看着都累!!!!
写到后面连一点想写下去的欲望都没有了,我会找个地方重新更新一下这一篇博客!大家见谅!!