|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 wangwang123 于 2021-11-3 16:55 编辑
- baseurl = 'http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/'
- findorder = re.compile(r'<td>(\d*)</td>')
- findstockcode = re.compile(r'<a.*target="_blank">(\d{6})</a>')
- findincrease = re.compile(r'<tr>.*<td class="c-rise">(.*)</td>.*<tr>',re.S)
- # 获取url
- def getdata(baseurl):
- for page in range(1, 2):
- url = baseurl + str(page)
- html = gethtml(url)
- print("得到第%d页html"%page, url)
- soup = BeautifulSoup(html, "html.parser")
- data = []
- item = str(soup.find_all("tr")) # 问题在这,由于要是用re.findall,后面都变成了文本,用正则的时候就很难用, 比如 我想找涨幅数据,要用c_rise 找到位置,可是有4个c_rise.就没法指定到我想要的那个数据,甚至下面都有其他的c_rise,怎么解决呢?或者 可以告诉我怎么去指定特定标签内的标签去查找内容,比如说这个案例里,要在 tr标签里的td标签去查找内容,我的最终目的就是想把涨跌幅数据提取出来,然后和对应的股票代码结合一起。希望大佬可以帮忙解决~谢谢~卡我半天的 实在想不出来了~
- # 序号
- order = re.findall(findorder, item)
- data.append(order)
- # 股票代码
- stockcode = re.findall(findstockcode, item)
- data.append(stockcode)
- # 涨幅
- stockincrease = re.findall(findincrease, item)
- data.append(stockincrease)
- print(stockincrease)
- print(len(stockincrease))
- # 获取html
- def gethtml(url):
- header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
- 'Chrome/94.0.4606.81 Safari/537.36'}
- request = urllib.request.Request(url, headers=header)
- response = urllib.request.urlopen(request)
- html = response.read().decode("GBK")
- return html
- getdata(baseurl)
复制代码
- import requests
- from lxml import etree
- def main():
- headers = {'user-agent': 'firefox'}
- pn = int(input('输入想爬取的页数:'))
- result = [] # 存结果
- for i in range(1, pn + 1):
- url = f'http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/{i}'
- r = requests.get(url, headers=headers)
- html = etree.HTML(r.text)
- trs = html.xpath('//tbody/tr')
- for tr in trs:
- data = {
- 'id': tr.xpath('./td[1]/text()')[0],
- 'code': tr.xpath('./td[2]/a/text()')[0],
- 'name': tr.xpath('./td[3]/a/text()')[0],
- 'cur_price': tr.xpath('./td[4]/text()')[0],
- 'up_down': tr.xpath('./td[5]/text()')[0]
- }
- result.append(data)
- print(result)
- if __name__ == '__main__':
- main()
复制代码
|
|